Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   Обновление проводника Explorer после смены сис. параметров (http://forum.oszone.net/showthread.php?t=140212)

Creat0R 14-05-2009 22:48 1118737

Начало обсуждения темы

Цитата:

Цитата Yashied
_SendMessage(0xFFFF, 0x001D, 0, 0) отправляет сообщение об установке шрифта (WM_FONTCHANGE) всем окнам верхнего уровня (HWND_BROADCAST). »

Интересно, этот Hwnd не может быть использован для обновления сделанных настроек в реестре? К примеру после скрытия расширения файлов (HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\HideFileExt)...

Yashied 14-05-2009 23:03 1118755

Цитата:

Цитата Creat0R
Интересно, этот Hwnd не может быть использован для обновления сделанных настроек в реестре? К примеру после скрытия расширения файлов (HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\HideFileExt)... »

Это лучше сделать следующим образом:
Код:

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

Это было на оф. форуме, ты мог это видеть.

HWND_BROADCAST просто говорит Windows о том, что сообщение должно быть отправлено во все окна независимо от их состояния (SHOW, HIDE, и т.д.).

Creat0R 14-05-2009 23:55 1118782

Цитата:

Цитата Yashied
Это лучше сделать следующим образом: »

Супер!!! Я долго мучался над этим, до сих пор я посылал это-же сообщение всем окнам explorer'а! (включая открытые диалоги типа FileSaveDialog()).

Как оно сделано можно увидеть в утилите Toggle Hidden Files & Files Extension.

P.S
И всё же, лучше вместо значении сообщении использовать сами константы, так будет яснее для всех. Что такое «0x7103»?

Yashied 15-05-2009 00:28 1118799

Хорошо.

Global Const $WM_COMMAND = 0x0111
...
DllCall('user32.dll', 'long', 'SendMessage', 'hwnd', $List[$i][1], 'int', $WM_COMMAND, "int", 0x7103, 'int', 0)
...

Что такое 0x7103 лучше спросить здесь, но лучше этого не делать. :)

Creat0R 15-05-2009 15:18 1119212

Цитата:

Цитата Yashied
Что такое 0x7103 лучше спросить здесь»

:lol: почитав более поздние комменты валика, я чуть не упал со стула.

Но если серъёзно, он не прав, он просто забыл что такое новичёк! И спросить про сообщение не помешало бы, т.к он сам где то писал что Magic Numbers (a.k.a «литеральные значения констант») использовать неприемлимо, но делать этого я не буду.
Я предпочитаю спрашивать сначала у гугля, и он вроде дал ответ:

Цитата:

Navigate to Menu > 215 > English > on the right pane, select Refresh and it shows 28931, these are some findings that maybe usefull for WM_COMMAND.
Refresh - 28931
Undo - 28699
Paste - 28698
Т.е это попросту идентификатор пункта в меню, и мы его вызываем.

Если покапаться дальше, то это будет работать не во всех системах, там ещё пишут что вроде в Vista нужен уже другой идентфикатор, т.ч это не универсальный метод, нужно вызывать саму комманду, а не исполняющий элемент...

Yashied 15-05-2009 16:35 1119306

Цитата:

Цитата Creat0R
там ещё пишут что вроде в Vista нужен уже другой идентфикатор »

В Vista и Windows 7 работает отлично.

Yashied 17-05-2009 19:36 1120850

CreatOR, похоже лучше этого способа обновить Windows Explorer никто не знает. На оф. форуме все молчат, ну Вы наверное это уже видели. Меня просто задел этот вопрос, но ответа я так и не нашел. В интернете тоже все много разных решений предлагают. 90% из них не работают или работают, но криво. Вообщем, пока пользуюсь этим. Если у кого нибудь есть идеи, то пожалуйста отпишитесь в этой ветке.

Кстати, там ошибка. Я поправил.

Код:

for $i = 1 To UBound($List) - 1
:shout:


Время: 07:40.

Время: 07:40.
© OSzone.net 2001-