多个窗口,单个托盘图标

我的目标是为我的应用程序的所有窗口提供一个图标。

经过一番阅读,我的理解是通过Shell_NotifyIcon()来创build托盘图标。 这个函数得到一个包含一个hWnd字段的NOTIFYICONDATA结构。 系统使用此HWND通知相应的托盘图标事件窗口。 这些事件是通过使用SetWindowLongPtr()在窗口上设置的WindowProccallback来处理的。

因此我的问题是:

  • 一个图标如何通知我的应用程序的所有窗口说左键单击?
  • 我可以Shell_NotifyIcon()多次与不同的NOTIFYICONDATA结构,每个具有不同的hWnd ,但具有相同的图标?
  • 如果注册创build托盘图标的原始窗口被破坏,该怎么办?

将创build一个隐藏的代理窗口是一个合适的解决scheme

一些背景:我的应用程序使用C调用WinAPI(使用js-ctypes),理想情况下可以在XP上运行所有Windows版本。

你在问题中实际上回答了你自己的问题。 最好的办法是创建一个隐藏的窗口,只要你需要托盘图标存在就可以存活。

你只需要调用Shell_NotifyIcon()一次, hWnd引用这个隐藏的窗口,并且让这个窗口把消息发送到需要接收它们的窗口。

这也使您能够灵活地决定跳过将消息发送到特定的窗口,或者能够根据您的特定应用程序的要求向每个窗口发送不同的消息。