Winapi 带HWND_广播的Win32 API SendMessage
我正在尝试使用myresult=SendMessage(hWnd,…)发送消息。据我所知,SendMessage向指定的目标hWnd发送Windows消息;目标的WndProc返回一个长值;该值由SendMessage(myresult)返回。到目前为止我说的对吗 好的,现在如果SendMessage hWnd是hWnd_广播,它将被发送到所有顶级窗口。那么哪个窗口的WndProc决定返回值呢 更新:02-10-20Winapi 带HWND_广播的Win32 API SendMessage,winapi,sendmessage,Winapi,Sendmessage,我正在尝试使用myresult=SendMessage(hWnd,…)发送消息。据我所知,SendMessage向指定的目标hWnd发送Windows消息;目标的WndProc返回一个长值;该值由SendMessage(myresult)返回。到目前为止我说的对吗 好的,现在如果SendMessage hWnd是hWnd_广播,它将被发送到所有顶级窗口。那么哪个窗口的WndProc决定返回值呢 更新:02-10-20 只是为了弄清楚我希望做什么… 我的应用程序由一小群需要通过windows消息进
只是为了弄清楚我希望做什么…
我的应用程序由一小群需要通过windows消息进行通信的windows应用程序组成。我的计划是广播一条注册信息,例如WM_IDENTIFYMYAPP,并通过回复识别所有兄弟姐妹。这与Adrian Mole在回答中解释的原因不同。返回值将是最后一个接收窗口处理消息并返回的值;发送应用程序很难确定这是哪个窗口(如果不是不可能的话) 通常,当您想使用
HWND\u广播
通知多个窗口(或与您没有句柄的窗口通信)时,应使用(异步)PostMessage
功能(立即返回),而不是SendMessage
(等待所有接收窗口处理消息)
如前所述,将(同步)
SendMessage
与HWND\u广播
一起用作目标可能会造成许多不良影响。但请注意,有些消息无法异步发送(通过PostMessage
)-WM_COPYDATA
是我所知道的一种消息。实际上只有少数或两条消息是设计用于广播的。其中包括WM_SYSCOLORCHANGE
和WM_DEVMODECHANGE
,即打算作为通知的消息。我不知道是什么最终决定了SendMessage,但从未发现它对任何东西都有用。返回值将是从最后一个接收窗口处理消息并返回的值。您是否试图将代码注入系统中具有窗口的每个进程中?这是我可以想到的使用HWND\u BROADCAST
exc的唯一原因IInspectable(和DDE,现在没有人应该使用它)提到的通知式消息的ept。请参阅我更新的问题以了解我的意图,这并没有回答问题。此外,对于广播消息,还有比PostMessage
更好的方法(SendNotifyMessage
,SendMessageTimeout
,SendMessageCallback
)。@IInspectable抱歉-我现在在我对问题的评论中加入了“答案”(虽然不是特别有用)。但我同意你的“更好的选择!”好的,现在这确实提供了答案。不过我想知道这是否准确。我找不到任何有关这方面的文档。你有链接吗?@IInspectable我的“信息”来自(Pitter)经验-但我正在寻找一个确认链接。阿德里安:嗯,这很不幸。但我想我有一个工作可以做我想做的。顺便说一句,PostXXX对我不起作用。