如何以编程方式刷新Windows资源管理器?
我有一个Windows外壳扩展,它使用界面在文件和文件夹上显示覆盖图标。我的分机有点像或 有时我需要让Windows资源管理器重新绘制所有图标。为此,我这样称呼:如何以编程方式刷新Windows资源管理器?,windows,winapi,windows-vista,explorer,windows-explorer,Windows,Winapi,Windows Vista,Explorer,Windows Explorer,我有一个Windows外壳扩展,它使用界面在文件和文件夹上显示覆盖图标。我的分机有点像或 有时我需要让Windows资源管理器重新绘制所有图标。为此,我这样称呼: SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL) SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0) 这将刷新任何打开的资源管理器窗口的桌面和右侧窗格。它不会刷新任何资源管理器窗口左侧的文件夹树 所以我试着
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL)
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0)
这将刷新任何打开的资源管理器窗口的桌面和右侧窗格。它不会刷新任何资源管理器窗口左侧的文件夹树
所以我试着这样发送:
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL)
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0)
在Vista上,这会刷新文件夹树,但不会刷新右侧窗格
shchangennotify()
和WM\u SETTINGCHANGE
的组合似乎在Vista上非常有效。但是我仍然不能刷新XP上的文件夹树,如果它被显示的话
有人知道如何做得更好吗
XP有更好的解决方案吗
发送SHCNE\u ASSOCCHANGED
有点像头顶上的夜总会探险家。它会导致整个桌面非常剧烈地刷新,并导致任何打开的资源管理器窗口失去滚动位置。有没有暴力程度稍低一点的
有人知道怎么做吗
这个更好吗
我个人不知道。你提到了做类似事情的乌龟程序,所以一个很好的起点是看看它们在源代码中做了什么:)
这些文件看起来是处理此问题的相关源文件:
- (用户名:“来宾”,密码:)
重建
方法中指出,每种方法都将:
也许这是在XP中工作的诀窍的一部分。使用spy++查看在windows资源管理器中按F5时发送的WM\u命令消息,或者查找用于查看/刷新的菜单消息 然后使用FindWindow获取所需的资源管理器窗口,并向其发送先前录制的WM_命令etc消息
这是一种控制各种Windows程序的有趣方式。您还可以向所有打开的资源管理器窗口发送带有F5键代码的WM_键关闭消息。不过这有点像黑客。TweakUI for XP有一个“修复图标缓存”选项。您可以使用SPY++来查看它的功能。HughE!你能解决你的问题吗?不幸的是没有更好的办法。我希望我们没有经常这样做@jeffamaphone我们不经常这样做。大部分时间一天几次。看起来不再使用重建,而是使用SHChangeNotify(SHCNE_UPDATEITEM,…)。这似乎也是Dropbox所做的。搜索一下乌龟的来源,看看我的意思。另外,要小心传递正确的SHCNF_路径参数(例如,用于Unicode的SHCNF_PATHW)。它似乎删除了所有项目,然后全部重新添加。当然,没有必要去做这些事情,因为如果你只是把显示模式改成其他模式,它会“刷新”<代码>:-|使用Spy++跟踪并尝试这些更改,虽然技术上可行,但这是一个真正的PITA。如果你还不习惯使用这个工具,你可能会浪费很多时间。在这种情况下,最简单的方法不是最好的方法。