我有一个 Windows shell 扩展,它使用 IShellIconOverlayIdentifier 在文件和文件夹上显示覆盖图标的界面。我的扩展有点像 乌龟CVS 或者 乌龟SVN.

有时我需要让 Windows 资源管理器重绘所有图标。为此,我致电 SH变更通知 像这样:

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 有点像用棍棒打探险家的头。它会导致整个桌面剧烈刷新,并导致任何打开的资源管理器窗口失去滚动位置。有没有什么不那么暴力的事情?

有帮助吗?

解决方案

有人有什么想法如何做得更好吗?

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

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

我注意到在 RebuildIcons 其中每个方法将:

  1. 将 shell 图标大小或颜色深度设置为临时值
  2. 通过广播设置更改来更新所有窗口
  3. 将 shell 图标大小或颜色深度重置为原始值
  4. 通过广播设置更改第二次更新所有窗口

也许这是在 XP 中运行的技巧的一部分。

其他提示

使用间谍+ +,看看有什么WM_COMMMAND消息被发送,当你按下F5在Windows Explorer或查找菜单消息用于查看/刷新

然后使用FindWindow函数来得到你想要的资源管理器窗口,并发送记录早些时候等消息WM_COMMAND吧。

这是控制各种Windows程序的一个有趣的方式。

您还可以发送一个WM_KEYDOWN消息与F5键码到所有打开的IE窗口。这是一个黑客位的虽然。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top