微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

原文地址:https://www.jb51.cc/windows/372803.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐