函数功能:
SendMessage 函数发送指定消息给一个或多个窗口。
SendMessage 函数直接调用指定窗口的窗口过程,直到该窗口过程执行完毕,该函数才返回。
如果希望发完消息立刻返回,请使用 SendMessageCallback 或 SendNotifyMessage 函数;如果希望将消息投递都线程的消息队列并立即返回,请使用 PostMessage 或 PostThreadMessage 函数。
API 函数原型:
LRESULT WINAPI SendMessage( _In_ HWND hWnd, _In_ UINT Msg, _In_ WPARAM wParam, _In_ LPARAM lParam );
参数解析:
|
参数 |
含义 |
|
hWnd |
1. 指定接收消息的窗口句柄 |
|
Msg |
1. 指定将被发送的消息 |
|
wParam |
消息的附加信息 |
|
lParam |
消息的附加信息 |
返回值:
返回值是指定消息的处理结果,这取决于所发送的消息。
备注:
1. 当消息被 UIPI 所阻断,调用 GetLastError 函数可以获得错误代码是 5(拒绝访问)。
2. 对于需要使用 HWND_BROADCAST 通信的应用程序,应当调用 RegisterWindowMessage 函数来为应用程序间的通信取得一个唯一的消息。
3. 系统只对系统级的消息(0 ~ WM_USER-1)进行封送处理。发送自定义消息(>= WM_USER)到另一个进程,你需要自己对消息进行封送处理。
4. 如果 SendMessage 函数的调用者跟指定窗口处于同一线程,则窗口过程就如同子程序一样被立即调用;如果不处于同一线程,则系统将切换到目标窗口所在的线程,并调用相关的窗口过程。
5. 在线程之间发送的消息,只有当接收线程在执行消息获取代码的时候才会被处理。此时调用 SendMessage 所在的线程会被阻塞,直到接收线程处理完该消息为止。然而,此时发送消息的线程仍然可以处理非队列消息。为了避免这种现象发生,最好使用 SendMessageTimeout 函数,并设置 fuFlags 参数为 SMTO_BLOCK。




