У меня есть дескриптор ($browser_handle
) окна веб-браузера («firefox»), доступный в моем сценарии AutoIt.AutoIt Подождите, пока окно браузера не будет видно, как ожидается.
Я хотел бы выполнить некоторые нажатия клавиш, когда я знаю, что окно браузера Firefox открыто и видно на моем экране, так что я могу принести его фокусировку с помощью -
WinActivate($browser_handle)
или
WinWaitActive($browser_handle)
Чтобы убедиться, что окно виден до того, как я попытаюсь сфокусировать его, у меня есть цикл while
, который ждет, пока не будет видно состояние дескриптора окна (2).
While (Not BitAND(WinGetState($browser_handle), 2)) WEnd //until window visible
Если я использую Sleep(5000)
функцию перед циклом в то время как я не возникло никаких проблем.
Если я не использую произвольную функцию Sleep
в своем сценарии, условие цикла While
никогда не становится true
и превращается в бесконечный цикл.
Когда я попытался проверить, что возвращаемое значение WinGetState($browser_handle)
, когда нет Sleep
функции,
Остался , даже если браузер виден и становится после закрытия окна браузера.
Я не могу понять, почему WinGetState
возвращаемое значение никогда не становится (видимый), даже если браузер виден, когда нет Sleep
функции.
Это тестовый код, который может воспроизвести проблему -
#include <Constants.au3>
Local $browser_name = 'C:\Program Files (x86)\Internet Explorer\iexplore.exe'
Run($browser_name)
ProcessWait('iexplore.exe')
Local $browsers = ProcessList('iexplore.exe')
Local $pid = $browsers[1][1];
_WinActiveByPID($pid)
Local $sText = WinGetTitle("[ACTIVE]")
; Display the window title.
MsgBox($MB_SYSTEMMODAL, "", $sText)
Func _WinActiveByPID($pid) ;False to WinActivate, True to just see if it's active
Local $aWL = WinList()
For $iCC = 1 To $aWL[0][0]
If ($aWL[$iCC][0] <> '') And _
(WinGetProcess($aWL[$iCC][1]) = $pid) Then
While (Not BitAND(WinGetState($aWL[$iCC][1]), 2))
MsgBox($MB_SYSTEMMODAL, "", WinGetState($aWL[$iCC][1]))
WEnd
WinWait($aWL[$iCC][1])
WinActivate($aWL[$iCC][1])
WinWaitActive($aWL[$iCC][1])
Return 1
EndIf
Next
Return SetError(2, 0, 0)
EndFunc
Примечание:
WinWait не работает в этой ситуации, если вы видите пример в ссылке есть
Sleep
послеWinWait
, эта функция возвращается, даже если окно скрыто.Окно браузера в моем исходном скрипте не запускается с использованием
Run
, это программа Java, которая открывает браузер. Я знаю, что методRun
возвращает PID браузера, который я могу использовать для решения этой проблемы, но поскольку он начинается с Java, я должен использоватьProcessList
для получения PID браузера.
Пожалуйста, дайте мне знать, как я могу заставить это работать.
Thanks
Показать полный сценарий. – user2530266
Пожалуйста, найдите код, который может воспроизвести проблему. –