我有一个Windows shell扩展,使用IShellIconOverlayIdentifier接口在文件和文件夹上显示覆盖图标。我的扩展类似于TortoiseCVS或TortoiseSVN。
有时我需要让Windows Explorer重新绘制所有图标。为此,我这样调用SHChangeNotify:
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL)
这将刷新任何打开的资源管理器窗口的桌面和右侧窗格。它不会刷新任何资源管理器窗口左侧的文件夹树。
因此,我尝试像这样发送WM_SETTINGCHANGE:
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0)
在Vista上,这将刷新文件夹树,但不会刷新右侧窗格。
在Vista上,使用SHChangeNotify()
和WM_SETTINGCHANGE
的组合似乎效果很好。但是,如果XP中显示了文件夹树,我仍然无法刷新它。
有人有更好的方法吗?
有没有更好的解决方案适用于XP?
发送SHCNE_ASSOCCHANGED
有点像用棍子猛击“资源管理器”。这会导致整个桌面非常剧烈地刷新,并导致任何打开的“资源管理器”窗口失去滚动位置。是否有一种不那么剧烈的方式?