【问题标题】:Is there a way to make AutoIt's WinWaitActive care about if a window is visible有没有办法让 AutoIt 的 WinWaitActive 关心窗口是否可见
【发布时间】:2011-05-21 21:29:07
【问题描述】:

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

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

问题似乎是“选择文件”对话框(不可见)由 IE 创建,激活,然后可见。这确实是一个基本的线程问题:

在某些情况下,IE 会激活对话框(但还不可见!)。我的脚本选择了它,隐藏对话框(实际上已经隐藏),然后 IE 使对话框可见,从而导致可见对话框(!)。

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

【问题讨论】:

    标签: windows automation autoit


    【解决方案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
    

    希望这会有所帮助。

    【讨论】:

    • 谢谢,我最终使用了以下代码(\n 应该有 \n):While not BitAND(WinGetState("Select File"), 2)\n Sleep(250)\n WEnd
    猜你喜欢
    • 2014-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多