我有一个Windowsshell扩展使用IShellIconOverlayIdentifier接口来显示文件和文件夹上的重叠图标。 我的扩展有点像TortoiseCVS或TortoiseSVN 。
有时我需要使Windows资源pipe理器重新绘制所有的图标。 要做到这一点,我打电话给SHChangeNotify像这样:
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL)
这将刷新任何打开的资源pipe理器窗口的桌面和右侧窗格。 它不会刷新任何资源pipe理器窗口左侧的文件夹树。
所以我尝试发送WM_SETTINGCHANGE像这样:
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0)
在Vista上刷新文件夹树,但不是右侧窗格。
SHChangeNotify()
跟WM_SETTINGCHANGE
的组合似乎在Vista上运行的很好。 但是如果显示的话,我仍然无法刷新XP上的文件夹树。
有没有人有任何想法如何做到这一点更好?
有没有更好的XP解决scheme?
发送SHCNE_ASSOCCHANGED
有点像clubbing Explorer。 它导致整个桌面刷新相当猛烈,打开任何打开的资源pipe理器窗口松动滚动位置。 有没有什么是暴力的?
有没有人有任何想法如何做得更好?
我个人不知道。 你提到了类似的乌龟计划,所以一个很好的起点是看看他们在源头上做什么:)
这些看起来是处理这个问题的相关源文件:
我在RebuildIcons
方法中注意到每个方法都会:
也许这是让事情在XP中工作的诀窍的一部分。
使用spy ++来查看在Windows资源管理器中按F5时发送的WM_COMMMAND消息,或查找用于查看/刷新的菜单消息
然后使用FindWindow获取所需的资源管理器窗口,并将WM_COMMAND记录的更早的等消息发送给它。
这是一个有趣的方式来控制各种Windows程序。
您也可以使用F5键码将WM_KEYDOWN消息发送到所有打开的资源管理器窗口。 虽然这是一个黑客。