PostMessage和HWND_BROADCAST

时间:2014-06-03 17:15:33

标签: c winapi broadcast sendmessage postmessage

我试图通过以下方式向所有窗口发送消息:

PostMessage( HWND_BROADCAST, 0x0401, 0, 0 );
or
SendMessage( HWND_BROADCAST, 0x0401, 0, 0 );

问题是,没有窗口收到此消息。 Windows有自己的线程。 问题是......如何向我的应用程序中的所有窗口发送消息,或者为什么这个功能不起作用......

提前致谢。

2 个答案:

答案 0 :(得分:3)

  

问题是,如何向我的应用程序中的所有窗口发送消息,或者为什么此功能无法正常工作。

WM_USER范围内的消息(顺便提一下,你真的应该停止使用像0x0401这样的魔术常量)是为私有窗口类保留的。另一方面,HWND_BROADCAST导致消息被传递到系统中的所有顶级窗口。

这两个事实冲突,PostMessage知道这一点。如果PostMessage要进行出价,那么它肯定会向窗口发送虚假消息,导致不良行为。因此PostMessage不会将您的消息发送到所有顶级窗口。

现在,如上所述,HWND_BROADCAST会将消息传递到系统中的所有顶级窗口。你不想要那个。您只希望它在您的应用程序中转到Windows。这意味着HWND_BROADCAST不适合您。如果要将消息传递到应用程序中的特定窗口,则必须维护或获取窗口列表,并逐个传递消息。

答案 1 :(得分:1)

您是否尝试使用它来访问所有顶级窗口?此API不适用于子窗口。您还应该确保使用RegisterWindowMessage返回的值而不是硬编码值。这个链接应该可以帮助你进入子窗口。

http://forums.codeguru.com/showthread.php?130766-How-to-Send-messages-to-ALL-child-windows