Как обновить Проводник Windows - PullRequest
4 голосов
/ 09 февраля 2011

enter image description here

Имя сетевого тома можно изменить.
Я изменил имя на Спинной диск
enter image description here

enter image description here

Чтобы изменить имя сети, я

  • Вписываю новое имя в реестр.
  • Подключите сетевой том с помощью таких функций, как DefineDosDeviceW.В этот момент проводник Windows прочитал реестр в моих догадках.
  • SHChangeNotify (SHCNE_DRIVEADD, SHCNF_PATH, root, NULL);// Конечно.
  • SendMessageTimeout (HWND_BROADCAST, WM_DEVICECHANGE, сообщение, (LPARAM) (& dbv), - SMTO_ABORTIFHUNG, 200, & dwResult);// Чтобы быть уверенным снова!

Это работает, но иногда не работает, хотя я использую SHChangeNotify и WM_DEVICECHANGE, чтобы быть уверенным.Иногда новое имя не применяется в Проводнике Windows.
Но если я завершаю работу Проводника и выполняю его повторно, применяется имя.

Я нахожу интерфейс с обновленным Windows Explorer. (Это правильный синтаксис? Извините, я не могу хорошо выразить это предложение.)
Есть ли подходящая функция?Проводник должен перечитать реестр и обновиться.

Ответы [ 2 ]

3 голосов
/ 09 февраля 2011

К сожалению, Explorer просто не может обновляться каждый раз, когда ему так говорят. Потому что слишком много приложений ведут себя плохо, и просто всегда используют SHChangeNotify () с SHCNE_ALLEVENTS. Представьте себе, если бы проводник действительно всегда обновлял все при каждом получении этого уведомления (да, иногда несколько раз в секунду!).

Вот почему иногда это не работает.

Но вот как вы можете «обмануть» исследователя: Отправьте уведомление для более чем одного пути, снизу вверх. Обычно достаточно сначала отправить уведомление, например, за N:\folder, а затем N:\, чтобы действительно обновить N:\.

И вы должны сначала отправить сообщение WM_DEVICECHANGE, а затем вызвать SHChangeNotify ().

3 голосов
/ 09 февраля 2011

Используйте SHChangeNotify ().Не знаю точно, какой wEventId вы бы использовали в данном конкретном случае.Начните с SHCNE_ALLEVENTS.

...