Как обновить Проводник 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.