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

前端之家收集整理的这篇文章主要介绍了如何以编程方式刷新Windows资源管理器?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个Windows shell扩展,使用 IShellIconOverlayIdentifier接口在文件文件夹上显示叠加图标。我的扩展名有点像 TortoiseCVSTortoiseSVN

有时我需要使Windows资源管理器重绘所有的图标。为此,我打电话给SHChangeNotify这样:

SHChangeNotify(SHCNE_ASSOCCHANGED,SHCNF_IDLIST,NULL,NULL)

这将刷新任何打开的资源管理器窗口的桌面和右侧窗格。它不会刷新任何资源管理器窗口左侧的文件夹树。

所以我试着发送这样的WM_SETTINGCHANGE

SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,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中使事情发挥作用的一部分。

猜你在找的Windows相关文章