Как обновить Проводник Windows

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

Чтобы изменить имя сети, я делаю

  • Написать новое имя в реестре.
  • Подключите мой сетевой том, используя такие функции, как 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 ответа

Решение

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

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

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

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

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

Другие вопросы по тегам