【问题标题】:Winapi Shell_NotifyIcon - Duplicated icons in Notification Area Icons windowWinapi Shell_NotifyIcon - 通知区域图标窗口中的重复图标
【发布时间】:2013-05-21 15:23:16
【问题描述】:

我正在开发一个 C++ 应用程序,该应用程序在通知区域中创建一个带有气球提示的图标。当用户单击气球时,将使用 Shell_NotifyIcon(NIM_DELETE, &nid) 删除图标,正如 MSDN 指示的那样。

问题是通知图标离开了托盘,但它仍保留在“通知区域图标”窗口中(当您单击 Windows 7/8 托盘中的“自定义”选项时打开的窗口)。然后,如果用户重新启动程序,图标将重复多次,因为程序可以重新启动,即使计算机正在重新启动。

我搜索了一下,发现删除了一些注册表项,可以清理缓存,但是需要重新启动 explorer.exe ......但这不是我想要实践的选项,原因有很多。

我的问题是: - 你们有人见过这个吗? - 是否有其他 Shell_NotifyIcon 的替代方法(假设使用这个是问题的可能性,一旦我对 Winapi 没有太多经验); - 有什么方法可以在不重启 explorer.exe 的情况下在通知区域窗口中强制“缓存清理”?

对于那些可以提供帮助的人,我提前表示感谢。

【问题讨论】:

  • 听起来 NIM_DELETE 实际上并没有工作。检查你的结构是否正确初始化,因为它是一个相当混乱的 API。
  • 它正在从托盘中删除,但图标仍然在自定义窗口中。
  • 它应该保留在自定义对话框中。这样,用户就知道图标首先出现了,并且可以在图标再次出现时决定图标的行为。只是在自定义对话框中列出不应该阻止您的应用程序再次运行,或再次显示相同的图标。如果它不能正常工作,或者重复显示,那么你一定是在你的托盘图标管理代码中做了一些根本性的错误。
  • 至于替代方案,有IUserNotificationIUserNotification2 接口,但它们只是在内部使用Shell_NotifyIcon() 的包装器。
  • 我会尝试 IUserNotification2 intead。谢谢雷米!

标签: visual-c++-2010 winapi


【解决方案1】:

确实,IUserNotification2 效果很好,问题解决了。

我基于Notifu´s 示例编写了一个新的通知类,使用IUserNotification2IQueryContinueIUserNotificationCallback

感谢大家的帮助。

【讨论】:

    猜你喜欢
    • 2013-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-05
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    相关资源
    最近更新 更多