【问题标题】:How to programmatically refresh the Notification Area Icons page如何以编程方式刷新通知区域图标页面
【发布时间】:2012-05-12 12:28:42
【问题描述】:

背景: 如果你看这里: http://msdn.microsoft.com/en-us/library/ee330740%28v=vs.85%29.aspx 在底部你会看到:

注意 卸载应用程序后,其通知区域图标仍可作为选项显示在控制面板的通知区域图标页面中长达 7 天。但是,在那里所做的任何更改都不会产生任何影响。

是的,当您卸载应用程序时,该图标仍然存在于“通知区域图标页面”中,直到您杀死 Explorer.exe 并重新启动它 - 这就是我要解决的问题。

您可以通过以下方式进入“通知区域图标页面”(在 Windows 7 中):右键单击任务栏 > 属性 > 自定义

所以我想做的是以编程方式从该列表中删除图标,甚至删除所有图标,然后让 Windows 在您重新打开该列表页面时重新创建它们(这可以通过删除 PastIconsStream 和 @ 987654323@HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify)

但同样,问题是您只能看到结果在您杀死并重新启动 Explorer.exe 之后 - 我假设当您重新启动 explorer.exe 时它会重建列表,但这次是正确的图标(即不包括已卸载应用程序的图标)。

所以为了让事情更简单,我会问这个: 在我删除PastIconsStream 和IconStreams 而不杀死/重新启动 explorer.exe 并且不重新启动/注销之后,如何以编程方式使资源管理器刷新“通知区域图标页面列表”,以便该列表不包括已卸载的应用程序图标?

【问题讨论】:

  • 没有支持的方法。
  • 有不受支持的方法吗?
  • 我的软件会清理未引用的注册表、临时文件……我也希望它从通知中删除不必要的图标,因此我不想杀死资源管理器。

标签: c++ vb.net windows-7 windows-explorer


【解决方案1】:

强制 Windows 重建其内部图标缓存应该可以解决问题。

为此,您需要:

  • 更改注册表中的Shell Icon Size参数
  • 发送HWND_BROADCAST 通知用户界面设置已更改
  • 恢复默认的Shell Icon Size值(否则整个Windows UI都会乱七八糟)
  • 再次重新发送广播消息

这是一个用 VB6(不是 VB.NET)编写的演示代码(很遗憾):

Private Sub RebuildIconCache()

    Dim IconSize As Integer
    Dim r As Long

    IconSize = QueryValue(HKEY_CURRENT_USER, "Control Panel\Desktop\WindowMetrics", "Shell Icon Size")
    SetKeyValue HKEY_CURRENT_USER, "Control Panel\Desktop\WindowMetrics", "Shell Icon Size", CStr(IconSize - 1)

    SendMessageTimeout HWND_BROADCAST, _
                        WM_SETTINGCHANGE, _
                        SPI_SETNONCLIENTMETRICS, _
                        0&, SMTO_ABORTIFHUNG, _
                        10000&, r

    DoEvents

    If IconSize < 32 Then IconSize = 32
    SetKeyValue HKEY_CURRENT_USER, "Control Panel\Desktop\WindowMetrics", "Shell Icon Size", CStr(IconSize)

    SendMessageTimeout HWND_BROADCAST, _
                        WM_SETTINGCHANGE, _
                        SPI_SETNONCLIENTMETRICS, _
                        0&, SMTO_ABORTIFHUNG, _
                        10000&, r

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-25
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 2013-04-19
    相关资源
    最近更新 更多