我有一个 Windows shell 扩展,它使用IShellIconOverlayIdentifier http://msdn.microsoft.com/en-us/library/bb761265(VS.85).aspx在文件和文件夹上显示覆盖图标的界面。我的扩展有点像乌龟CVS http://www.tortoisecvs.org/ or 乌龟SVN http://tortoisesvn.tigris.org/ExplorerIntegration.html#overlays.
有时我需要让 Windows 资源管理器重绘所有图标。为此,我致电SH变更通知 http://msdn.microsoft.com/en-us/library/bb762118(VS.85).aspx像这样:
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL)
这将刷新任何打开的资源管理器窗口的桌面和右侧窗格。它不会刷新任何资源管理器窗口左侧的文件夹树。
所以我尝试发送WM_SETTINGCHANGE http://msdn.microsoft.com/en-us/library/ms725497(VS.85).aspx像这样:
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0)
在 Vista 上,这会刷新文件夹树,但不会刷新右侧窗格。
的组合SHChangeNotify()
其次是WM_SETTINGCHANGE
似乎在 Vista 上运行得很好。但是XP上的文件夹树如果显示的话我还是无法刷新。
有谁知道如何做得更好?
XP有更好的解决方案吗?
Sending SHCNE_ASSOCCHANGED
有点像用棍棒打探险家的头。它会导致整个桌面剧烈刷新,并导致任何打开的资源管理器窗口失去滚动位置。有没有什么不那么暴力的事情?