将指定的消息发送到窗口或窗口。该SendMessage函数的函数调用指定的窗口的窗口过程,并不会返回,直到窗口过程已经处理了该消息。
要发送消息并立即返回,请使用SendMessageCallback或SendNotifyMessage函数。要将消息发布到线程的消息队列并立即返回,请使用PostMessage或PostThreadMessage函数。
LRESULT WINAPI SendMessage(
_In_ HWND hWnd,
_In_ UINT Msg,
_In_ WPARAM wParam,
_In_ LPARAM lParam
);
hWnd [in]
类型:HWND
窗口程序将接收消息的窗口的句柄。如果此参数为HWND_BROADCAST((HWND)0xffff),则会将消息发送到系统中的所有顶级窗口,包括禁用或不可见的未知窗口,重叠窗口和弹出窗口; 但消息不发送到子窗口。
邮件发送受UIPI约束。进程的线程可以将消息发送到较小或相同完整性级别的进程中的线程的消息队列。
类型:UINT
要发送的消息。
类型:WPARAM
附加消息特定信息。
类型:LPARAM
附加消息特定信息。
返回值
类型:LRESULT
返回值指定消息处理的结果; 这取决于发送的消息。
备注
当UIPI阻止消息时,使用GetLastError检索的最后一个错误设置为5(访问被拒绝)。
需要使用HWND_BROADCAST进行通信的应用程序应使用RegisterWindowMessage函数来获取应用程序间通信的唯一消息。
系统只对系统消息进行编组(范围为0到(WM_USER -1))。要发送其他消息(那些> = WM_USER)到另一个进程,你必须做自定义编组。
如果指定的窗口是由调用线程创建的,则窗口过程将立即作为子例程调用。如果指定的窗口是由不同的线程创建的,则系统切换到该线程并调用相应的窗口过程。线程之间发送的消息只有在接收线程执行消息检索代码时才被处理。发送线程被阻塞,直到接收线程处理消息。然而,发送线程将在等待其消息被处理的同时处理传入的非排队消息。为了防止这种情况,请使用设置了SMTO_BLOCK的SendMessageTimeout。
可访问性应用程序可以使用SendMessage将WM_APPCOMMAND消息发送到shell以启动应用程序。此功能不能保证适用于其他类型的应用程序。