Есть ли способ позаботиться о WinWaitActive от AutoIt, если окно видно - PullRequest
1 голос
/ 08 декабря 2010

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

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

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

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

Есть ли какая-либо опция, которую я могу установить, чтобы команда WinWaitActive также ожидала, когда окно будет видимым, а не только активным?

1 Ответ

2 голосов
/ 08 декабря 2010

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

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

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

...