- Сообщения
- 5,379
- Репутация
- 2,724
Функция аналогична WinWait(), с той лишь разницей, что можно задать проверку для искомого окна $sTitle, является ли оно дочерним для родительского окна $sOwner. _WinWaitOwner() будет незаменима в случае, если присутствуют несколько окон с одинаковыми заголовками, например "Save As".
Код:
;Opt('WinWaitDelay', 0)
Run('Notepad.exe')
If Not WinWait('Untitled - Notepad', '', 3) Then
Exit
EndIf
Send('^s')
If Not WinWait('Save As', '', 3) Then
Exit
EndIf
$hWnd = _WinWaitOwner('Save As', '', 'Untitled - Notepad', 3)
If $hWnd Then
WinMove($hWnd, '', 10, 10)
EndIf
Func _WinWaitOwner($sTitle, $sText = '', $sOwner = 0, $iTimeOut = 0)
Local $hWnd, $List, $Ret, $Timer = TimerInit()
$iTimeOut = Round($iTimeOut * 1000)
While 1
$List = WinList($sTitle, $sText)
If $List[0][0] Then
If Not $sOwner Then
$hWnd = $List[1][1]
ExitLoop
Else
$hWnd = WinGetHandle($sOwner)
If IsHWnd($hWnd) Then
For $i = 1 To $List[0][0]
$Ret = DllCall('user32.dll', 'hwnd', 'GetWindow', 'hwnd', $List[$i][1], 'uint', 4)
If (Not @error) And ($Ret[0] = $hWnd) Then
$hWnd = $List[$i][1]
ExitLoop 2
EndIf
Next
EndIf
EndIf
EndIf
If ($iTimeOut) And (TimerDiff($Timer) > $iTimeOut) Then
Return 0
EndIf
Sleep(10)
WEnd
Sleep(Opt('WinWaitDelay'))
Return $hWnd
EndFunc ;==>_WinWaitOwner