我有一个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
有点像吟唱探险者头脑。它导致整个桌面刷新非常猛烈,并且任何打开的资源管理器窗口都会松开滚动位置。有什么东西不那么暴力吗?
答案 0 :(得分:7)
有没有人有任何想法怎么做 这更好吗?
我个人不知道。你提到了做类似事情的Tortoise程序,所以一个很好的出发点是看看他们在源代码中做了什么:)
这些看起来是处理此问题的相关源文件:
我在每个RebuildIcons
方法中都会注意到:
也许这是让在XP中工作的技巧的一部分。
答案 1 :(得分:0)
使用spy ++查看在Windows资源管理器中按F5时发送的WM_COMMMAND消息,或者查找用于查看/刷新的菜单消息
然后使用FindWindow获取所需的资源管理器窗口,并将之前记录的WM_COMMAND等消息发送给它。
这是控制各种Windows程序的有趣方式。
答案 2 :(得分:0)
您还可以将带有F5键码的WM_KEYDOWN消息发送到所有打开的资源管理器窗口。这有点像黑客。