gpt4 book ai didi

c++ - 如何以编程方式刷新通知区域图标页面

转载 作者:太空狗 更新时间:2023-10-29 23:19:10 28 4
gpt4 key购买 nike

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

Note When an application is uninstalled, its notification area icon can still appear to the user as an option in the Notification Area Icons page in the Control Panel for up to seven days. However, any changes made there will have no effect.

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

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

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

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

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

最佳答案

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

为此,您需要:

  • 更改注册表中的 Shell Icon Size 参数
  • 发送 HWND_BROADCAST 以通知 UI 设置已更改
  • 恢复默认的 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

关于c++ - 如何以编程方式刷新通知区域图标页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10423787/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com