【问题标题】:How to refresh Windows Explorer如何刷新 Windows 资源管理器
【发布时间】:2011-02-09 01:58:41
【问题描述】:

可以更改网络卷的名称。
我把名字改成了Spinal Disk

要更改网络名称,我会这样做

  • 在注册表中写入新名称。
  • 使用 DefineDosDeviceW 等函数附加我的网络卷。在这个时间里,Windows 资源管理器在我的猜测中读取了注册表。
  • SHChangeNotify(SHCNE_DRIVEADD, SHCNF_PATH, root, NULL); // 可以肯定。
  • SendMessageTimeout(HWND_BROADCAST, WM_DEVICECHANGE, message, (LPARAM)(&dbv), - SMTO_ABORTIFHUNG, 200, &dwResult); // 再次确定!

它可以工作,但有时即使我使用 SHChangeNotify 和 WM_DEVICECHANGE 也可以确定。有时,新名称不会在 Windows 资源管理器中应用。
但是,如果我终止 Explorer 并重新执行,则会应用该名称。

我正在寻找一个刷新了 Windows Explorer 的界面。(语法是否正确?抱歉,我无法很好地表达这句话。)
有合适的功能吗? Explorer 应重新读取注册表并进行刷新。

【问题讨论】:

  • Benjamin,在此期间您找到解决问题的方法了吗?我有一个相关的问题(不一样),但我认为如果你找到了解决方案,它也可以帮助我。你能描述一下你的结果吗?

标签: windows winapi com windows-explorer windows-shell


【解决方案1】:

不幸的是,Explorer 无法在每次被告知时都刷新。因为太多的应用程序表现不佳并且总是将 SHChangeNotify()SHCNE_ALLEVENTS 一起使用。想象一下,如果浏览器真的每次收到通知时都会刷新所有内容(是的,有时每秒几次!)。这就是为什么它有时不起作用的原因。

但这里是你可以“欺骗”探险家的方法:
从下往上发送多个路径的通知。通常,首先发送通知就足够了,例如N:\folder 然后让N:\ 真正刷新N:\

您应该首先发送WM_DEVICECHANGE消息,然后才调用SHChangeNotify()

【讨论】:

  • 谢谢。这是有道理的。请再给我解释一下。为什么要先发送 WM_DEVICECHANGE 消息?有原因吗?实际上,我不知道它在内部做什么。我在 TrueCrypt 开源项目中看到了代码。他们最后发送了 WM_DEVICECHANGE。为什么你认为如果我发送通知 N:/folder 然后 N:/ 效果很好?在尝试它们之前,我想了解这一点。顺便说一句,你是 tortoisesvn 的开发者!我喜欢它。很高兴见到你。
【解决方案2】:

使用 SHChangeNotify()。实际上不确定在这种特殊情况下您将使用哪个 wEventId。从 SHCNE_ALLEVENTS 开始。

【讨论】:

  • 尝试删除驱动器 + 驱动器添加。
  • 它可能运作良好。但是在附加我的网络卷之后,我什至不知道新名称是否已应用好。所以我不能尝试删除并重新添加。
猜你喜欢
  • 1970-01-01
  • 2011-01-30
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-03
  • 1970-01-01
相关资源
最近更新 更多