我的目标是为我的应用程序的所有窗口设置一个图标。
经过一些阅读后,我的理解是通过Shell_NotifyIcon()
创建托盘图标。此函数获得NOTIFYICONDATA
结构,其中包含hWnd
字段。系统使用此HWND
来通知托盘图标事件的相应窗口。这些事件由在WindowProc
窗口上设置的SetWindowLongPtr()
回调处理。
因此我的问题是:
Shell_NotifyIcon()
多次使用不同的NOTIFYICONDATA
结构,每个结构都有不同的hWnd
,但图标相同吗?创建隐藏代理窗口是否适合作为解决方案?
一些背景知识:我的应用程序使用C调用WinAPI(使用js-ctypes),理想情况下应该适用于XP上的所有Windows版本。
答案 0 :(得分:6)
你几乎在问题本身中回答了你自己的问题。最好的办法是创建一个隐藏的窗口,只要您需要托盘图标存在,该窗口就能存活下来。
您只需在Shell_NotifyIcon()
引用此隐藏窗口时调用hWnd
,并让此窗口将消息发布到需要接收它们的各个窗口。
这也使您能够灵活地决定跳过向特定窗口发送消息,或者能够向每个窗口发送不同的消息,具体取决于您的特定应用程序的要求。