我有一个Windows shell扩展,它使用IShellIconOverlayIdentifier接口在文件和文件夹上显示叠加图标.我的扩展有点像TortoiseCVS或TortoiseSVN.
有时候我需要让Windows资源管理器重绘它的所有图标.为此,我像这样调用SHChangeNotify:
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL)
这将刷新任何打开的资源管理器窗口的桌面和右侧窗格.它不会刷新任何资源管理器窗口左侧的文件夹树.
所以我试着像这样发送WM_SETTINGCHANGE:
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0)
在Vista上,这会刷新文件夹树,但不会刷新右侧窗格.
的组合SHChangeNotify()
之后WM_SETTINGCHANGE
,似乎在Vista上工作得非常好.但如果显示,我仍然无法刷新XP上的文件夹树.
有没有人有任何想法如何更好地做到这一点?
XP有更好的解决方案吗?
发送SHCNE_ASSOCCHANGED
有点像吟唱探险者头.它导致整个桌面刷新非常猛烈,并且任何打开的资源管理器窗口都会松开滚动位置.有什么东西不那么暴力吗?
有没有人有任何想法如何更好地做到这一点?
我个人不知道.你提到了做类似事情的Tortoise程序,所以一个很好的出发点是看看他们在源代码中做了什么:)
这些看起来是处理此问题的相关源文件:
TortoiseCVS - ShellUtils.cpp
TortoiseSVN - ShellUpdater.cpp(用户名:"guest",密码:"")
我RebuildIcons
在每个方法中都会注意到:
将shell图标大小或颜色深度设置为临时值
通过广播设置更改来更新所有窗口
将shell图标大小或颜色深度重置为原始值
通过广播设置更改,第二次更新所有窗口
也许这是让XP中的工作正常工作的一部分.