Что нового

Функция WinWaitActive. Ожидание активации одного из окон.

Math

Новичок
Сообщения
85
Репутация
1
Как сделать ожидание активации одного из окон?
При этом активным будет одно окно, какое - неизвестно.

Можно сделать так:
Код:
$WinAct1 = WinWaitActive("первое" & " окно",'', 60)
$WinAct2 = WinWaitActive("второе" & " окно",'', 60)
$WinAct3 = WinWaitActive("третье" & " окно",'', 60)
If $WinAct1 then
_Func()
ElseIf $WinAct2 then
_Func()
ElseIf $WinAct3 then
_Func()
Else
_FuncClose()
EndIf


Но это неудобно. Особенно если вариантов будет много.
Как упростить? Можно ли сделать "в одну строчку", т.е нечто подобное:
Код:
$WinAct = WinWaitActive("первое" ИЛИ "второе" ИЛИ "третье" & " окно",'', 60)
If $WinAct then
_Func()
Else
_FuncClose()
EndIf
 

ArtInt

Знающий
Сообщения
135
Репутация
18
Math , возможно я недопонимаю, но... :-[ Почему нельзя сделать как-то так:
[box title=Script1 - long and boring]
Код:
If WinWaitActive("первое" & " окно",'', 60) or WinWaitActive("второе" & " окно",'', 60)
 or WinWaitActive("третье" & " окно",'', 60) then _Func()
[/box]
:scratch:
Хотя, возможно, это слишком длинно? :blink:
Тогда, возможно это будет лучше, т.к. это универсальный вариант! :whistle:
[box title=Script2 - universal]
Код:
Dim $WinName [*n*]
$winName [1-1] = ... ;Имя окна
$winName[2-1] = ...
...
$winName[*n*-1] = ...

$MaxI =  UBound ($winName)
For $i = 1-1 to $MaxI[1]
If WinWaitActive ($WinName[$i],'', 60) then _Func()
Next
[/box]
Второе мне больше нрава
Второй скрипт более универсален, и позволяет передавать функции, какое именно окно активно.
[box title=Продолжение Script2, выводящее активное акно в виде msgbox]
Код:
...
If WinWaitActive ($WinName[$i],'', 60) Then _Func ($WinName[$i])
Next

Func _Func ($Name)
msgbox (64,"",$Name)
Endfunc

[/box]
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,320
Math,
Я бы так сделал.
Код:
Dim $aWinTitle[4] = [3, 'One Title', 'Two Title', 'Three Title']
$hWin = 0
$iWait = 60000 ; 60 sec

$iStart = TimerInit()
While TimerDiff($iStart) <= $iWait
	For $i = 1 To $aWinTitle[0]
		;$hWin = WinGetHandle($aWinTitle[$i])
		$hWin = WinActive($aWinTitle[$i])
		If $hWin Then ExitLoop 2
	Next
	Sleep(100)
WEnd
If $hWin Then
	MsgBox(64, 'Info', 'OK :)' & @LF & $hWin & @LF &  WinGetTitle($hWin))
Else
	MsgBox(16, 'Error', 'No Windows :(')
EndIf
 
Верх