1

私のスクリプトは、IEの[ファイルの選択]ダイアログが表示されるのを待ってから、それを削除して、カスタムのファイル選択インターフェイスに置き換えることになっています。私はそれをすべて機能させましたが、私を悩ませていることが1つあります。コードは次のとおりです。

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

問題は、[ファイルの選択]ダイアログが(目に見えないように)IEによって作成され、アクティブにされてから表示されることであるようです。これは本当に基本的なスレッドの問題です。

場合によっては、IEはダイアログをアクティブにします(ただし、まだ表示されていません!)。私のスクリプトはそれを取得し、ダイアログを非表示にします(実際にはすでに非表示になっています)。次に、IEはダイアログを表示し、その結果、ダイアログが表示されます(!)。

WinWaitActiveコマンドがアクティブなだけでなくウィンドウが表示されるのを待つように設定できるオプションはありますか?

4

1 に答える 1

2

以下の関数を使用して、ウィンドウが表示されているかどうかを確認できます。

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

お役に立てれば。

于 2010-12-08T04:31:01.430 に答える