有没有办法让AutoIt的WinWaitActive关心窗口是否可见

时间:2010-12-07 22:08:20

标签: windows automation autoit

我的脚本应该等待IE的“选择文件”对话框出现,然后让它消失并用自定义选择文件界面替换它。我已经完成了所有工作,但有一件事唠叨我。代码如下:

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

问题似乎是“选择文件”对话框(无形地)由IE创建,处于活动状态,然后可见。这确实是一个基本的线程问题:

在某些情况下,IE会使对话框处于活动状态(但尚未显示!)。我的脚本选择了这个,隐藏对话框(实际上已经隐藏了),然后IE使对话框可见,从而产生可见的对话框(!)。

我可以设置任何选项,使得WinWaitActive命令也等待窗口可见,而不仅仅是活动吗?

1 个答案:

答案 0 :(得分: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

希望这有帮助。