我有一个Windows shell扩展,使用
IShellIconOverlayIdentifier接口在文件和文件夹上显示叠加图标。我的扩展名有点像
TortoiseCVS或
TortoiseSVN。
有时我需要使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中使事情发挥作用的一部分。