Есть ли способ заставить WinWaitActive AutoIt заботиться о том, видно ли окно
-
09-10-2019 - |
Вопрос
Предполагается, что мой скрипт будет ждать появления диалогового окна "Выбрать файл" в IE, затем удалит его и заменит пользовательским интерфейсом выбора файла.У меня все это работает, но есть одна вещь, которая не дает мне покоя.Код выглядит следующим образом:
WinWaitActive("Select File")
WinSetState("Select File", "", @SW_HIDE)
Проблема, по-видимому, заключается в том, что диалоговое окно "Выбрать файл" (невидимо) создано IE и стало активным, тогда ставший видимым.На самом деле это основная проблема с потоками:
В некоторых случаях IE делает диалоговое окно активным (но пока не видимым!).Мой сценарий отражает это, Скрывает диалоговое окно (которое на самом деле уже скрыто), а затем IE делает диалоговое окно видимым, что приводит к появлению видимого диалогового окна (!).
Есть ли какая-либо опция, которую я могу установить, которая заставляет команду WinWaitActive также ждать, пока окно станет видимым, а не просто активным?
Решение
вы можете использовать приведенную ниже функцию, чтобы узнать, видно ли окно.
Func IsWindowVisible($handle)
If BitAnd(WinGetState($handle), 2) Then
Return 1
Else
Return 0
EndIf
EndFunc
затем вы можете использовать подобный цикл, чтобы делать то, что вы хотите:
While 1
If IsWindowVisible(FindWindow("Select File", "")) Then ; I'm not sure about FindWindow syntax
WinSetState("Select File", "", @SW_HIDE)
Break
Else
Sleep (1000)
EndIf
EndWhile
Надеюсь, это поможет.