如何刷新Windows资源管理器

5

enter image description here

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

enter image description here

要更改网络名称,我需要:

  • 在注册表中写入新名称。
  • 使用 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 资源管理器中没有应用。
但是,如果我终止资源管理器并重新启动,就可以应用名称。

我正在寻找一个界面,可以刷新 Windows 资源管理器。(这个语法正确吗?对不起,我表达不好。)
是否有适当的函数?资源管理器应该重新读取注册表并刷新。


Benjamin,你在这段时间里找到解决方法了吗?我也遇到了一个类似的问题(不完全相同),但如果你已经找到了解决方案,那么它可能会对我有所帮助。你能描述一下你的结果吗? - CodeX
2个回答

4

不幸的是,资源管理器不能每次都按照指示刷新。因为太多应用程序表现不佳并且总是使用SHChangeNotify()SHCNE_ALLEVENTS。如果资源管理器每次接收到通知时都真的刷新所有内容(是的,有时每秒钟几次!),那就会出现问题。

但是,您可以通过以下方式“欺骗”资源管理器:
从下往上发送多个路径的通知。通常,首先向例如N:\folder发送通知,然后再向N:\发送通知,以真正刷新N:\

并且您应该发送WM_DEVICECHANGE消息,然后再调用SHChangeNotify()


1
谢谢,我明白了。请再给我解释一下。为什么我应该先发送WM_DEVICECHANGE消息?有原因吗?实际上,我不知道它在内部做了什么。我在TrueCrypt开源项目中看到了这段代码。他们最后发送了WM_DEVICECHANGE。另外,如果我先发送通知N:/folder然后是N:/,你认为它为什么能正常工作?在尝试之前,我想先理解一下。顺便说一下,您是tortoisesvn的开发人员!我喜欢它。很高兴见到您。 - Benjamin

3

使用SHChangeNotify()函数。在这种情况下,不确定应该使用哪个wEventId参数。可以先尝试使用SHCNE_ALLEVENTS。


尝试移除驱动器 + 添加驱动器。 - Hans Passant
它可能运行良好。但是在连接我的网络卷后,我甚至不知道新名称是否已经成功应用,因此我无法尝试删除和重新添加。 - Benjamin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接