Gibt es eine Möglichkeit AutoIt WinWaitActive kümmern uns um, wenn ein Fenster sichtbar zu machen ist
-
09-10-2019 - |
Frage
Mein Skript soll für die „Select File“ -Dialog von IE warten, um zu erscheinen, dann machen sie gehen weg und ersetzen sie durch eine benutzerdefinierte Datei auswählen Schnittstelle. Ich habe sie alle Arbeits bekommen, aber es ist eine Sache, mich zu nörgeln. Der Code ist wie folgt:
WinWaitActive("Select File")
WinSetState("Select File", "", @SW_HIDE)
Das Problem scheint zu sein, dass die "Select File" -Dialog ist (unsichtbar) von IE erstellt, aktiv gemacht, und sichtbar gemacht. Es ist ein Grund threading Problem wirklich:
In einigen Fällen macht IE den Dialog aktiv ist (aber noch nicht sichtbar!). Mein Skript nimmt das auf, Verkleinert der Dialog (Wich ist eigentlich schon versteckt) und dann IE macht den Dialog sichtbar Weichen Ergebnisse in einem sichtbaren Dialog (!).
Gibt es eine Möglichkeit, die ich setzen kann Weichen der Befehl WinWaitActive macht auch für das Fenster wartet die sichtbar sein, nicht nur aktiv?
Lösung
können Sie die Funktion unten wissen, ob das Fenster sichtbar ist.
Func IsWindowVisible($handle)
If BitAnd(WinGetState($handle), 2) Then
Return 1
Else
Return 0
EndIf
EndFunc
dann können Sie eine Schleife wie diese verwenden zu tun, was Sie wollen:
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
Hope, das hilft.