如何检查Autohotkey中是否存在控制字段?

时间:2017-08-02 20:59:05

标签: screen-scraping autohotkey

我正在编写一个与基于Java的Web应用程序交互的AutoHotkey脚本。有一次,我希望我的脚本暂停并等到它找到控件SunAwtCanvas1后再继续运行。

我知道您可以使用IfWinExist检查窗口是否存在,但我不知道按钮或控制字段是否存在类似的命令。

如何检查AutoHotkey中是否存在控制字段?

1 个答案:

答案 0 :(得分:1)

选项1:WinExist标题,control_name

使用AU3_Spy.exe进行检查时,您可能会在文本中找到控件名称。在那种情况下,只需

IfWinExist wintitle , SunAwtCanvas1

会做的。

虽然我更喜欢功能语法,特别是因为埃及括号可用:

If (WinExist(wintitle, "SunAwtCanvas1")) {
    // …
}

选项2:ControlGet

如果控件名称不在文本中,或者它位于文本中但可能不可见,并且您想知道它是否可见,则ControlGet可以读取该控件的某些属性。

如果控件不存在,则ErrorLevel设置为1,OutputVar设置为空白。此外,它会在Try {}块中抛出异常。

此外,某些控件可能已预先创建但不可见。因此,要检查是否显示控件:

ControlGet ctrlVisible, Visible,, SunAwtCanvas1
If (ctrlVisible) { // like IfControlVisible
    // …
}

AFAIK没有类似WinWait的操作符用于控件,但是简单的循环可以做到:

// add IfWinExist or WinWait somewhere before to fill in LastWindowFound

Loop
{
    ControlGet ctrlVisible, Visible,, SunAwtCanvas1 
    Sleep 100 ; to avoid high CPU load, and to allow app finish its operations in case control is found in middle of something (that's why it's after ControlGet, not before)
} Until ctrlVisible

在此示例中,ControlGet将等待控件显示在LastWindowFound中。或者您可以在ControlGet中将wintitle / wintext / excludetitle / excludetext指定为参数。