如何以编程方式刷新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中使事情发挥作用的一部分。

相关文章

Windows2012R2备用域控搭建 前置操作 域控主域控的主dns:自...
主域控角色迁移和夺取(转载) 转载自:http://yupeizhi.blo...
Windows2012R2 NTP时间同步 Windows2012R2里没有了internet时...
Windows注册表操作基础代码 Windows下对注册表进行操作使用的...
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的...
一个简单的Windows Socket可复用框架说起网络编程,无非是建...