当前位置:  开发笔记 > 开发工具 > 正文

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

如何解决《如何以编程方式刷新Windows资源管理器?》经验,为你挑选了1个好方法。

我有一个Windows shell扩展,它使用IShellIconOverlayIdentifier接口在文件和文件夹上显示叠加图标.我的扩展有点像TortoiseCVS或TortoiseSVN.

有时候我需要让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有点像吟唱探险者头.它导致整个桌面刷新非常猛烈,并且任何打开的资源管理器窗口都会松开滚动位置.有什么东西不那么暴力吗?



1> Simon Liesch..:

有没有人有任何想法如何更好地做到这一点?

我个人不知道.你提到了做类似事情的Tortoise程序,所以一个很好的出发点是看看他们在源代码中做了什么:)

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

TortoiseCVS - ShellUtils.cpp

TortoiseSVN - ShellUpdater.cpp(用户名:"guest",密码:"")

RebuildIcons在每个方法中都会注意到:

    将shell图标大小或颜色深度设置为临时值

    通过广播设置更改来更新所有窗口

    将shell图标大小或颜色深度重置为原始值

    通过广播设置更改,第二次更新所有窗口

也许这是让XP中的工作正常工作的一部分.

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有