如何刷新 Windows 资源管理器

Ben*_*min 5 windows com winapi windows-explorer windows-shell

在此处输入图片说明

网络卷的名称可以更改。
我把名字改成了脊椎盘
在此处输入图片说明

在此处输入图片说明

要更改网络名称,我会

  • 在注册表中写入新名称。
  • 使用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资源管理器的界面。(语法正确吗?对不起,我不能很好地表达这句话。)
有没有合适的功能?资源管理器应重新读取注册表并刷新。

Ste*_*fan 4

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

但是,您可以通过以下方法“欺骗”浏览器:
从下到上发送多个路径的通知。N:\folder通常,先发送通知 for 例如,然后发送通知就足够了N:\真正刷新就足够了N:\

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