如何以编程方式刷新Windows资源管理器?

我有一个Windows shell扩展,使用IShellIconOverlayIdentifier接口在文件和文件夹上显示叠加图标。我的扩展名有点像TortoiseCVSTortoiseSVN

有时我需要使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有点像在头上的探索者。它会导致整个桌面相当猛烈地刷新,并使任何打开的资源管理器窗口松动滚动位置。有没有什么比较少的暴力?

Does anyone have any ideas how to do
this better?

我个人不知道。你提到了类似的东西的乌龟程序,所以一个很好的起点是看看他们在源中做什么:)

这些看起来是处理这个问题的相关源文件:

> TortoiseCVS – ShellUtils.cpp
> TortoiseSVN – ShellUpdater.cpp(用户名:“guest”,密码:“”)

我在RebuildIcons方法中注意到每一个方面:

>将shell图标大小或颜色深度设置为临时值
>通过广播设置更改来更新所有窗口
>将shell图标大小或颜色深度重置为原始值
>第二次更新所有窗口,并进行设置更改的广播

也许这是在XP中使事情发挥作用的一部分。

http://stackoverflow.com/questions/647316/how-can-i-programmatically-refresh-windows-explorer

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:如何以编程方式刷新Windows资源管理器?