对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不能用来传送带有指针的消息,否则发送消息会失败。