Есть ли способ заставить WinWaitActive AutoIt заботиться о том, видно ли окно

StackOverflow https://stackoverflow.com/questions/4382145

  •  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

Надеюсь, это поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top