首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何以广播方式发送自定义Windows消息

发广播消息时需要注意的地方

当你尝试发送广播消息(通过HWND_BROADCAST)时,请记住,这个广播消息必须具有全局的含义。

之前的一篇文章中,我讨论了各种消息范围的含义。请注意,只有系统定义的范围(0..WM_USER-1)和注册的消息范围(MAXINTATOM .. MAXWORD)具有全局含义。其他两个范围具有类特定或应用程序特定的含义。

换句话说,你无法在WM_USER范围内广播消息,因为该消息对每个窗口类都有不同的含义。

同样,WM_APP范围内的消息对每个应用程序都有不同的含义。

我们在Windows 95中遇到了这个问题。有些程序决定广播自定义私有消息,例如 WM_USER + 0x0100,打算将它们传递到该程序的其他实例。当然,当这些消息到达其他窗口时,它们将WM_USER + 0x0100解释为其他一些私人消息,并且表现得很异常或直接崩溃了。

另一方面,这些程序确实希望该消息到达其自身其他副本的窗口,因此我们不能仅仅阻止该程序的广播而停止工作。 应用程序依靠系统不试图阻止它们崩溃其他程序!

解决的办法是消除差异。如果你广播了不安全广播的消息,则Windows 95只会将其发送到旧式程序。新型程序(标记为4.0或更高版本)将不会收到该消息。这样,旧程序继续像往常一样相互影响,但是新程序遵循新规则。

另一个道义上的提示

当发送广播消息时,请确保每个接收它的窗口都有能力进行处理。

总结

广播自定义消息,确实不是一个十分靠谱的进程间通信方法。

咱们还是使用一些前人教导我们的传统方法,如共享内存,管道,WM_COPY之类的方法吧。

祝各位IPC愉快。

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。

本文来自:《Broadcasting user-defined messages》

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20210219A02DVJ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券