如何刷新Windows资源管理器

时间:2011-02-09 01:58:42

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

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资源管理器的界面。(语法是否正确?抱歉,我无法很好地表达这句话。)
有适当的功能吗?资源管理器应该重新读取注册表并刷新。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

不幸的是,Explorer每次被告知都无法刷新。因为太多的应用程序行为很糟糕,并且总是将SHChangeNotify()与SHCNE_ALLEVENTS一起使用。想象一下,如果资源管理器每次收到通知时都会刷新所有内容(是的,有时每秒几次!)。

这就是为什么它有时不起作用。

但是这里是你如何'欺骗'探险家: 从下往上发送多个路径的通知。通常只需先发送通知即可。 N:\folder然后N:\真正刷新N:\

首先发送WM_DEVICECHANGE消息,然后调用SHChangeNotify()。