消息的发送
SendMessage函数将指定的消息发送到一个或多个窗口。它调用指定窗口的窗口过程,直到窗口过程处理完消息后才返回。
// 函数原型
LRESULT SendMessage(
HWND hWnd, // 目标窗口句柄
UINT Msg, // 发送的消息
WPARAM wParam, // 消息附加参数
LPARAM lParam // 消息附加参数
);
SendMessage函数是非队列消息
消息的寄送
PostMessage函数在与创建指定窗口的线程相关联的消息队列中放置(发布)一条消息,并在不等待线程处理该消息的情况下返回。
// 函数原型
BOOL PostMessage(
HWND hWnd, // 目标窗口句柄
UINT Msg, // 发送的消息
WPARAM wParam, // 消息附加参数
LPARAM lParam // 消息附加参数
);
- hWnd参数为HWND_BROADCAST时,该消息被发布到系统中的所有顶级窗口,包括禁用或不可见的无主窗口、重叠窗口和弹出窗口。消息不发布到子窗口。
广播消息
BroadcastSystemMessage函数向指定的收件人发送消息。接收方可以是应用程序、可安装驱动程序、网络驱动程序、系统级设备驱动程序或这些系统组件的任何组合。
long BroadcastSystemMessage(
DWORD dwFlags, // 广播选项
LPDWORD lpdwRecipients, // 接收消息的对象
UINT uiMessage, // 广播消息
WPARAM wParam, // 消息附加参数
LPARAM lParam // 消息附加参数
);
- dwFlags参数
BSF_QUERY:广播一次消息只发送给一个接收者,只有当前接收方返回TRUE时才发送给后续接收方
如果没有指定BSF_QUERY,则将消息发送给所有接收者