Что нового

Обновление проводника Windows

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 703
Функция обновляет проводник Windows (все окна). Аналогична нажатию F5 для каждого окна. Может быть полезна, после внесения в реестр соответствующих изменений, например после смены иконки для какого-либо типа файла.


Код:
Func _UpdateExplorer()

	Local $Opt = Opt('WinSearchChildren', 1)
	Local $List = WinList('[CLASS:SHELLDLL_DefView]')

	For $i = 1 To UBound($List) - 1
		DllCall('user32.dll', 'long', 'SendMessage', 'hwnd', $List[$i][1], 'int', 0x0111, 'int', 0x7103, 'int', 0)
	Next

	Opt('WinSearchChildren', $Opt)

EndFunc   ;==>_UpdateExplorer
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1 528
Репутация
325
Yashied
Если мне не изменяет память есть функция EnvUpdate() - обновление среды операционной системы. То же самое кажется :-\
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 703
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 703
[?]
undefined сказал(а):
_UpdateExplorer() это и есть вместо F5.
Я бы сказал, что это и есть F5. Есть другой "правильный" вариант обновления, но он почему-то не всегда срабатывает с первого раза (по крайней мере у меня).

:(

Код:
Global Const $SHCNE_ASSOCCHANGED = 0x08000000
Global Const $SHCNF_IDLIST = 0

DllCall('shell32.dll', 'none', 'SHChangeNotify', 'long', $SHCNE_ASSOCCHANGED, 'uint', $SHCNF_IDLIST, 'ptr', 0, 'ptr', 0)
 

saavaage

Знающий
Сообщения
171
Репутация
17
Yashied, у меня сработало только это:

Код:
Func _RestartExplorer()
  Const $WM_SETTINGCHANGE = 0x001A
  Const $HWNDBROADCAST = 0xFFFF
  Const $szParam = "Environment"

  DllCall("user32.dll", "int", "SendMessage", "hwnd", $HWNDBROADCAST, "int", $WM_SETTINGCHANGE, "int", 0, "int", $szParam)
  Run("rundll32 user32.dll,UpdatePerUserSystemParameters")
EndFunc   ;==>_UpdateExplorer


Ваш вариант в шапке топика не сработал, т.к. он, действительно, отрабатывает только F5.
PS Требовалось перезапустить проводник, чтобы вступили в силу изменения в реестре. Я скрывал разделы системы...
 

amorphyc

Новичок
Сообщения
42
Репутация
0
Yashied [?]
Я бы сказал, что это и есть F5. Есть другой "правильный" вариант обновления, но он почему-то не всегда срабатывает с первого раза (по крайней мере у меня).
Код: AutoIt [Выделить]Global Const $SHCNE_ASSOCCHANGED = 0x08000000Global Const $SHCNF_IDLIST = 0DllCall('shell32.dll', 'none', 'SHChangeNotify', 'long', $SHCNE_ASSOCCHANGED, 'uint', $SHCNF_IDLIST, 'ptr', 0, 'ptr', 0)
А у меня только именно это работает.
 
Верх