Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


mrak1990
Цитата:
Я тут переписал твой скрипт в таком виде, в каком, как мне кажется проще его понять начинающим. Плюс добавил комментарии.
Спасибо.

Правда комментарии немного не точные, так будет правильнее (также немного изменил функции, раньше если небыло найдено окон, то рабочий стол тоже не обновлялся, а также во второй функции сразу помещаются в массив уникальные идентификаторы (hWnd), чтобы не нужно было их определять в первой функции - они ведь возвращаются от WinList() ):

Код: Выделить весь код
Func _UpdateExplorer()
    ;Устанавливаем параметр, отвечающий за метод распознвания заголовок окон (4 - самый чувствительный),
    ;и помещаем в переменную $OldOpt исходное значение этого параетра.
    Local $OldOpt = Opt("WinTitleMatchMode", 4)
     ;Получаем массив содержащий заголовки окон проводника Windows вкдючая Рабочего стола (по средствам функции _ExplWinGetList).
    Local $WinExpListArr = _ExplWinGetList()
    ;Если возвратился массив (а значит найдены заголовки окон),
     ;то перебираем весь массив, с целью обновления каждого окна (по его заголовку из элементов массива).
    If IsArray($WinExpListArr) Then
        For $iWin = 1 To $WinExpListArr[0]
            ;Вызов функции для обновления текущего окна
            ;(по уникальному идентификатору который содержится в текущем элементе массива).
            DllCall("user32.dll", "long", "SendMessage", "hwnd", $WinExpListArr[$iWin], "int", 0x111, "int", 28931, "int", 0)
        Next
    Else
        ;Если не вернулся массив (значит небыли найдены окна проводника), тогда обновляем только Рабочий стол
        ;(переменная $WinExpListArr теперь содержит только один уникальный идентификатор Рабочего стола).
        DllCall("user32.dll", "long", "SendMessage", "hwnd", $WinExpListArr, "int", 0x111, "int", 28931, "int", 0)
    EndIf
    ;Устанавливаем исходное значение (заданное значение при входе в функцию) параметра,
    ;отвечающего за метод распознвания заголовок окон.
    Opt("WinTitleMatchMode", $OldOpt)
EndFunc

Func _ExplWinGetList()
    ;Получаем массив, содержащий список существующих заголовок окон проводника Windows (Explorer),
    ;и их уникальный идентификатор (hWnd).
    Local $WinList = WinList("classname=CabinetWClass")
    ;Если вернулся массив (а значит найдено одно или более окон), тогда делаем перебор по массиву,
    ;в целях отсеивания только уникальных идентификаторов существующих окон (проводника Windows).
    If IsArray($WinList) Then
        ;Объявляем массив, который будет собдержать список уникальных идентификаторов существующих окон.
        Local $WinListArr[UBound($WinList)+1]
        ;Перебираем полученный массив $WinList, и отсеиваем в новый массив $WinListArr
        ;только уникальные идентификаторы окон Explorer.
        For $iW = 1 To $WinList[0][0]
            $WinListArr[$iW] = $WinList[$iW][1]
        Next
        ;Присваеваем нулевому элементу нового массива ($WinListArr), значение ровняющееся общему количеству элементов в этом массиве.
        $WinListArr[0] = UBound($WinListArr)-1
        ;Присваиваем последнему элементу этого же массива, уникальный идентификатор (основываясь на "Classname") Рабочего стола.
        $WinListArr[$WinListArr[0]] = WinGetHandle("classname=Progman")
        ;Возвращаем массив, содержащий список идентификаторов всех существующих окон проводника (вкючая Рабочего стола).
        Return $WinListArr
    Else
        ;Если функция WinList() не "вернула" массив (а значит небыло найдено окон проводника),
        ;тогда возвращаем только один уникальный идентификатор Рабочего стола.
        Return WinGetHandle("classname=Progman")
    EndIf
EndFunc

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 20:33, 28-04-2007 | #349