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

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

Аватара для Creat0R

Must AutoIt


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

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


Пример ожидания окна в панели задач:

Код: Выделить весь код
#include <GUIToolbar.au3>

$iRet = _WinWaitOnTaskBar("Some window text or Handle", "", 5)

MsgBox(64, 'Return', $iRet)

Func _WinWaitOnTaskBar($sTitle, $sText="", $iWait=0)
    Local $hWinWait = WinWait($sTitle, $sText, $iWait)
    If Not $hWinWait Then Return $hWinWait

    Local $hToolbar = ControlGetHandle("[CLASS:Shell_TrayWnd]", "", "ToolbarWindow322")
    Local $aWinList, $iToolbarButtonIndex, $iTimer = TimerInit()

    While 1
        $aWinList = WinList()

        For $i = 0 To $aWinList[0][0] Step 1
            If Not BitAND(WinGetState($aWinList[$i][1]), 2) Then ContinueLoop

            $iToolbarButtonIndex = _WinAPI_FindToolbarButton($aWinList[$i][1], $hToolbar)

            If $iToolbarButtonIndex > 0 And $aWinList[$i][1] = $hWinWait Then Return $aWinList[$i][1]
        Next

        If $iWait > 0 And TimerDiff($iTimer)/1000 >= $iWait Then Return 0
        Sleep(10)
    WEnd

    Return 0
EndFunc

Func _WinAPI_FindToolbarButton($hWnd, $hTB)
    Local $iReturn = -1, $iPID, $hProcess, $sStruct = DllStructCreate("ptr")

    ; open process owning toolbar control
    _WinAPI_GetWindowThreadProcessId($hTB, $iPID)

    $hProcess = _WinAPI_OpenProcess(0x410, False, $iPID)

    If $hProcess Then
        Local $iCount = _GUICtrlToolbar_ButtonCount($hTB)

        For $i = 0 To $iCount - 1
            Local $iID = _GUICtrlToolbar_IndexToCommand($hTB, $i)

            ; button param is ptr to owner's window handle, stored in target process's memory space
            Local $dwData = _GUICtrlToolbar_GetButtonParam($hTB, $iID)

            ; read the window handle from the explorer process
            Local $aRet = DllCall("kernel32.dll", "int", "ReadProcessMemory", "ptr", _
                $hProcess, "ptr", $dwData, "ptr", DllStructGetPtr($sStruct), "uint", 4, "uint*", 0)

            If $aRet[5] Then
                If $hWnd = DllStructGetData($sStruct, 1) Then
                    $iReturn = $i
                    ExitLoop
                EndIf
            EndIf
        Next

        _WinAPI_CloseHandle($hProcess)
    EndIf

    Return $iReturn
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


Последний раз редактировалось Creat0R, 30-12-2009 в 10:38.


Отправлено: 15:10, 29-12-2009 | #4