AutoHotKey教程4:循环语句While和Loop

文章介绍了AutoHotkey(AHK)中的循环结构,包括While循环、无参数的Loop、带参数的Loop(如LoopParse,LoopFiles,LoopRead),并给出了实例,展示了如何使用这些循环语句进行鼠标框选、处理字符串、遍历文件和读取文件内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


AHK系列:

While

AHK提供三种循环方法,分别是Loop, WhileFor,其中WhileFor在其他语言中都很常见,下面通过while循环,实现一个鼠标框选矩形尺寸的脚本

; 来自官网的案例
CoordMode "Mouse", "Screen"

~LButton::
{
    MouseGetPos &begin_x, &begin_y
    while GetKeyState("LButton")
    {
        MouseGetPos &x, &y
        ToolTip begin_x ", " begin_y "`n" Abs(begin_x-x) " x " Abs(begin_y-y)
        Sleep 10
    }
    ToolTip
}

其中,MouseGetPos可以获得鼠标的位置,并将其赋值给begin_x, begin_y。然后,GetKeyState可获取鼠标或键盘的状态,当LButton即鼠标左键处于按压状态时,执行while循环的语句,首先获取当前的x,y坐标,然后弹出一个ToolTip,用于显示鼠标框选出的矩形尺寸,结果如下

在这里插入图片描述

相比之下,For循环稍显复杂,用于迭代某个列表,考虑到For循环与可迭代类型息息相关,故而放在后面与可迭代对象一起讲解。

Loop

WhileFor相比,最简单的循环方式其实是Loop,在不加参数的情况下,就是一个死循环,如果用Loop改写上面的函数,则内容如下

CoordMode "Mouse", "Screen"

~LButton::
{
    MouseGetPos &begin_x, &begin_y
    Loop
    {
        if not GetKeyState("LButton")
            break
        MouseGetPos &x, &y
        ToolTip begin_x ", " begin_y "`n" Abs(begin_x-x) " x " Abs(begin_y-y)
        Sleep 10
    }
    ToolTip
}

其中,break用于跳出循环,这个关键字不仅适用于Loop循环,也同样适用于其他循环。

带参数的Loop

如果Loop后面跟着不同的参数,则其含义又有不同,根据参数类型,AHK共提供了五种Loop格式,可对文件夹、字符串以及文件进行遍历。

  • 数字 表示执行循环的次数
  • Loop Files 将检索指定的文件夹
  • Loop Parse 将检索字符串片段
  • Loop Read 将按行读取文件内容
  • Loop Reg 检索指定注册表子键的内容,每次一个项目

由于类似Loop 3 这种循环3次的语法相对比较简单,而注册表操作相对来说并不高频,更适合将Loop Reg放在注册表操作中讲解,故而下面主要对Files, Parse, Read这三种Loop循环进行示例说明。

Loop Parse

Loop Parse用于遍历字符串,其参数除了将要被调用的字符串外,还包括另外两个可缺省的参数

  • Delimiters 用于分割字符串的字符串
  • OmitChars 字符串在分割之后,在首尾移除的字符

下面用逗号来分割剪贴板中的内容,并逐段输出

CapsLock::{
    Loop Parse, A_Clipboard, ","{
        MsgBox A_LoopField
    }
}

在点击CapsLock后,效果为

在这里插入图片描述

Loop Files

Loop Files的完整调用参数为Loop Files FilePattern , Mode,其中FilePattern为支持通配符的路径字符串;Mode可缺省,此时只包括文件且不递归子文件夹,此外可以指定D, F, R三种模式,含义如下

  • D 包含文件夹
  • F 包含文件
  • R 递归到子目录,即对文件夹所有子文件进行遍历。

下面遍历所有.ex结尾的文件

CapsLock::{
FileList := ""
Loop Files, "*.ex"
    MsgBox A_LoopFileName
}

其中,A_LoopFileName表示单次循环时的文件名。

Loop Read

Loop Read用于打开文件并按行遍历,其内置变量A_LoopReadLine即表示某次循环时的某一行

CapsLock::{
    Loop read, "test.ahk"{
        MsgBox A_LoopReadLine
    }
}

效果如下

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微小冷

请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值