在我们重复做一些事情的时候,就需要使用循环了。而 AHK 正是能将复杂的手动工作自动化的工具,循环自然必不可少。但 AHK 中的循环也是多种多样的,我们慢慢道来。

最简单的循环

最简单的情况,我们知道要循环多少次,比如想连续按下 10 次回车键:

Loop, 10
{
    Send, {Enter}
}

这样就可以了。在 Loop 后加上要循环的次数,然后大括号里边就是要循环执行的语句。当然我们可以先把循环的次数放进一个变量,这样更灵活些:

count := 10

Loop, %count%
{
    Send, {Enter}
}

可以在循环体中使用 A_Index 来获取当前循环的次数。

或者有可能我们想一直循环执行:

Loop
{
    Send, {Enter}
    Sleep, 1000
}

这个就是死循环了,如果脚本不退出就会一直执行,某些情况我们确实需要这样。但更多情况,我们需要在满足某个条件时结束循环:

; 这个 stop 变量会在代码的其他地方修改,比如在某个定时器里
stop := false

Loop
{
    Send, {Enter}
    Sleep, 1000

    if (stop)
    {
        break
    }
}

break 是用来退出循环的,continue 是用来结束当前循环,进入下一次循环的。这和其他语言都一致。

Loop Until 循环

上边的最后一种用法,即满足某个条件时结束循环,也可以用 Until 来实现:

stop := false

Loop
{
    Send, {Enter}
    Sleep, 1000
}
Until stop

看起来比刚才的要简洁一些。

While 循环

有些时候我们需要先判断条件,然后再决定是否要循环,这样虽然用 Loop 也能实现,但有些别扭,这时就可以用 While 循环了。

count := 0

while (count < 10)
{
    Send, {Enter}
    Sleep, 1000
    count++
}

count := 0

Loop
{
    if (count >= 10)
    {
        break
    }

    Send, {Enter}
    Sleep, 1000
    count++
}

是等同的,使用哪个就看自己的习惯了。

更多内容

有些时候我们需要循环读取数组、读取字符串中的子字符串、读取文件内容、遍历目录下的文件甚至遍历注册表等,AHK 中都有很方便的用法,而无需让我们在 Loop 里写复杂的逻辑,我们会在之后的文章中了解到。