2011-02-09 9 views
4

enter image description hereКак обновить проводник Windows

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

enter image description here

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

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

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

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

+0

Benjamin, вы нашли решение своей проблемы тем временем? У меня есть связанная с этим проблема (не то же самое), но я думаю, что если бы вы нашли решение, это могло бы мне помочь. Не могли бы вы описать свой результат? – CodeX

ответ

3

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

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

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

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

+0

Спасибо. Это имеет смысл. Пожалуйста, объясните это мне немного больше. Зачем мне сначала отправлять сообщение WM_DEVICECHANGE? Есть ли причина? На самом деле, я не знаю, что он делает внутри. Я видел код в проекте с открытым исходным кодом TrueCrypt. Они отправили WM_DEVICECHANGE последним.И почему вы думаете, что это хорошо работает, если я отправляю уведомление N:/folder, тогда N: /? Прежде чем попробовать их, я хотел бы это понять. Кстати, вы разработчик черепах! Я люблю это. Рад видеть тебя. – Benjamin

3

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

+0

Спасибо, Ханс. Я отредактировал свой вопрос. Пожалуйста, прочитайте еще раз. – Benjamin

+0

Попробуйте удалить диск + диск. –

+0

Это может сработать. Но я даже не знаю, было ли новое имя применено хорошо или нет, после подключения моего сетевого тома. Поэтому я не могу попробовать удалить и повторно добавить. – Benjamin

Смежные вопросы