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

Мой сценарий должен дождаться появления диалогового окна «Выбор файла» в IE, а затем убрать его и заменить его настраиваемым интерфейсом выбора файла. У меня все заработало, но меня беспокоит одна вещь. Код выглядит следующим образом:

WinWaitActive("Select File")
WinSetState("Select File", "", @SW_HIDE)

Проблема, похоже, в том, что диалоговое окно «Выбрать файл» (невидимо) создается IE, становится активным, а затем затем становится видимым. На самом деле это основная проблема потоковой передачи:

В некоторых случаях IE делает диалог активным (но еще не видимым!). Мой сценарий выбирает это, скрывает диалог (который на самом деле уже скрыт), а затем IE делает диалог видимым, что приводит к появлению видимого диалога (!).

Могу ли я установить какой-либо параметр, который заставляет команду WinWaitActive также ждать, пока окно не станет видимым, а не просто активным?


person dvdvorle    schedule 07.12.2010    source источник


Ответы (1)


вы можете использовать функцию ниже, чтобы узнать, видно ли окно.

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

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

person fardjad    schedule 08.12.2010
comment
Спасибо, в конце концов я использовал следующий код (\ n, где должен быть \ n): While not BitAND(WinGetState("Select File"), 2)\n Sleep(250)\n WEnd - person dvdvorle; 08.12.2010