窗口间传送数据wsprintf,WM_SETTEXT,SendMessage的理解
对wsprintf API函数的理解:
int wsprintf
( LPTSTR lpOut, // pointer to buffer for output
LPCTSTR lpFmt, // pointer to format-control string
... // optional arguments
);
第一个参数是输出目的缓冲区,第二个参数是要往缓冲区里面放的内容,
如果参数二中有%s,%x等格式化字符串的符号,就需要在后面加上格式化
字符串的实际内容,即wsprintf这个函数的参数是不确定的,最少有两个
参数。
WM_SETTEXT 的理解:
WM_SETTEXT
wParam = 0; // not used; must be zero
lParam = (LPARAM)(LPCTSTR)lpsz; // address of window-text string
在调用SendMessage的时候,
LRESULT SendMessage(
HWND hWnd, // handle of destination window
UINT Msg, // message to send
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
SendMessage:
第一个参数是你即将要向他发送消息的目的窗口句柄
第二个参数是发送的消息类型。WINDOWS中有很多消息的定义,是以WM_...开头的。
第三第四个参数就是要发送的消息的两个参数的内容。
每种类型的
消息都有两个参数,lParam,wParam,通过MSDN可以查找具体的格式。在例子中
WM_SETTEXT中第一个参数wParam必须为0,lParam是指向发送的字符串的首地址。
通过以上三个函数的配合,可以向目标窗口发送消息。
另外的有关API函数有COPYDATASTRUCT:
typedef struct tagCOPYDATASTRUCT { // cds
DWORD dwData;
DWORD cbData;
PVOID lpData;
} COPYDATASTRUCT;
第一个参数是备用字段,一般不用或者用来表明变量的类型,
第二个参数是发送字符的长度
第三个参数是指向待发送数据的指针。
WM_COPYDATA的格式:
WM_COPYDATA
wParam = (WPARAM) (HWND) hwnd; // handle of sending window
lParam = (LPARAM) (PCOPYDATASTRUCT) pcds; // pointer to structure with data
这个函数是专门用来向不同程序的窗口发送消息的,使用例子:
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data
stCopyData COPYDATASTRUCT <> ;定义COPY结构体变量
.code
...
invoke SendMessage,hDestWnd,WM_COPYDATA,hWnd,addr stCopyData ;使用结构体变量时注意先要填充结构体
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
通过以上代码就可以向其他窗口发送消息了。
SendMessage和PostMessage的区别:
LRESULT SendMessage(
HWND hWnd, // handle of destination window
UINT Msg, // message to send
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
Return Values
The return value specifies the result of the message processing and depends on the message sent.
BOOL PostMessage(
HWND hWnd, // handle of destination window
UINT Msg, // message to post
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
Return Values
If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error information, callGetLastError.
两个函数的参数是一模一样的,不一样的只是返回值类型。
SendMessage是在向目标程序
发送过去消息以后等待发送的消息被处理完毕以后,才从目的程序中返回来。返回值的具体情况依赖于原程序的发送和目标进程对消息的处理。
PostMessage是直接向目标程序的消息队列里面插入发送的消息,不论目标程序处理没处理,都从目标程序中返回来,发送成功返回非0值,发送失败返回0。
PostMessage不能用来传送带有指针的消息,否则发送消息会失败。
窗口间传送数据wsprintf,WM_SETTEXT,SendMessage的理解的更多相关文章
- C# 窗口间传递数据
C#两个窗口之间传递数据 1 公用变量值传递 public partial class Form1 : Form //parent form { public string name="&q ...
- 零基础Android学习笔记-03 窗口间的数据传递
1.通过全局变量来传递. 新建一个全局的类继承于Application package com.example.helloworld; import android.app.Application; ...
- C#中使用SendMessage在进程间传递数据的实例
原文:C#中使用SendMessage在进程间传递数据的实例 1 新建解决方案SendMessageExample 在解决方案下面新建三个项目:CopyDataStruct,Receiver和Send ...
- 使用 WM_COPYDATA 在进程间共享数据
开发中有时需要进程间传递数据,比如对于只允许单实例运行的程序,当已有实例运行时,再次打开程序,可能需要向当前运行的实例传递信息进行特殊处理.对于传递少量数据的情况,最简单的就是用SendMessage ...
- C#不同窗体间通信,数据传递
在一个项目中,很多时候都需要在窗体间进行数据传递和通信,最觉见的是父子窗体之间的数据传递,比如登录ID,各个窗体都需要知道.有很多文章都写了这方面的问题,提出很多优秀的方法,鄙人不才,搜了一些资料之后 ...
- 详解 Qt 线程间共享数据(用信号槽方式)
使用共享内存.即使用一个两个线程都能够共享的变量(如全局变量),这样两个线程都能够访问和修改该变量,从而达到共享数据的目的. Qt 线程间共享数据是本文介绍的内容,多的不说,先来啃内容.Qt线程间共享 ...
- CPU与外设传送数据方式
7.2 CPU与外设之间数据传送的方式 在微型计算机系统中,CPU与外设之间的数据传送方式主要有程序传送方式.中断传送方式和直接存储器存取(DMA)传送方式,分别介绍如下. 7.2.1 程序传 ...
- Qt学习:线程间共享数据(使用信号槽传递数据,必须提前使用qRegisterMetaType来注册参数的类型)
Qt线程间共享数据主要有两种方式: 使用共享内存.即使用一个两个线程都能够共享的变量(如全局变量),这样两个线程都能够访问和修改该变量,从而达到共享数据的目的: 使用singal/slot机制,把数据 ...
- Excel文档间的数据替换 ---电脑版APP 自动操作魔法师
http://www.won-soft.com/macro/solution/excel-data-replace.htm 介绍: 在我们的日常工作中, 可能经常需要使用同各种数据表格打交道.比如财务 ...
随机推荐
- IO在block级别的过程分析
btt User Guide在百度找了3天没找到,bing也不行,结果google第一页第5个结果就是. 可恶的GFW http://www.fis.unipr.it/doc/blktrace-1.0 ...
- socket与http的区别
---------------------------------------------------------------------------------------------------- ...
- tcpdf中文解决方案
步骤如下:1.确保你测试tcpdf能正常输出英文内容的pdf2.测试输入中文内容后显示是?的乱码或者空白分析原因,是因为我们输入的中文,tcpdf字体库并不支持,因此乱码或者空白显示 添加一个合适的字 ...
- VB指针操作和消息钩子
二.VB怎么用指针 要想弄明白VB怎么使用指针,就必须要弄明白两件事,第一,如何取得数组的指针,第二,如何将指针所指向的数组取出来. A.在讲解这两个问题之前,我们需要了解几个 ...
- 基于HALCON的双目立体视觉系统实现
双目立体视觉是机器视觉的一种重要形式,它是基于视差原理并由多幅图像获取物体三维几何信息的方法.双目立体视觉系统一般由双摄像机从不同角度同时获得被测物的两幅数字图像,或由单摄像机在不同时刻从不同角度获得 ...
- [ML]熵、KL散度、信息增益、互信息-学习笔记
[ML]熵.KL散度.信息增益.互信息-学习笔记 https://segmentfault.com/a/1190000000641079
- Linux-CentOS 更新Firefox版本
1.用你本地的旧版 firefox,访问http://www.firefox.com.cn,下载Linux版本的Firefox. 2.进入存放下载文件(Firefox-latest-x86_64.ta ...
- Varint 数值压缩
[Varint 数值压缩] Varint 是一种紧凑的表示数字的方法.它用一个或多个字节来表示一个数字,值越小的数字使用越少的字节数.这能减少用来表示数字的字节数.比如对于 int32 类型的数字,一 ...
- InfoPanel
[InfoPanel] The Info panel shows the color values beneath the pointer and, depending on the tool in ...
- 73. Set Matrix Zeroes (Array)
Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. Follow ...