AutoHotKey学习总结第一节:AHK基本语法

AHK需要安装AHK环境,编写AHK脚本完成快捷键设定或者自动化工作。AHK我个人觉得是一个挺方便简单的语言,写一些好用的小工具或者挂机脚本不错。

一、基本语法

  1. 重映射
  • OriginKey::DestinationKey

AHK脚本的开头通常规定了如何调用该脚本功能,也就是重映射功能
该句的::是关键字,OriginKey代表了使用哪些按键触发::以后的语句块。如:
!s::表示Alt+s触发。使用其他组合键参考帮助文档。

  1. 识别与发送键鼠动作
  • GetKeyState, OutputVar, KeyName [, Mode]

KeyName定义了监控哪个键位,OutputVar保存了该键的动作。GetKeyState函数具有返回值,其返回值在按下时为1,弹出时为0。

  • Click, x, y, ClickCount

Click模拟发送鼠标动作(左中右及滚轮),改变参数可以控制在特定坐标点击特定次数,不设定坐标则是在鼠标当前位置点击。

默认的点击间隔和点击持续时间极短,使用 SetMouseDelay 可以改变延时的长度。
坐标xy需要设定是相对屏幕的坐标或者想对活动窗口的坐标,使用CoordMode设置。

  • Send Keys

发送模拟键击和鼠标点击到活动窗口。Keys是要发送的按键序列. 和其他命令一样, 在首个参数前的逗号可以省略。

如果想同时按下某个键时点击鼠标,请使用Send Keys,该函数可以同时发送多个键位,具体名字参考帮助文档。但是Send Keys默认直接发送到活动窗口。

  1. 流程控制

AHK提供了基本的Loop,While等循环结构和If,switch等分支结构,语法和主流语言基本相同,使用循环时需要设置计数变量。

  • Sleep, DelayInMilliseconds

在继续前等待指定的时间量。

如想添加延时,则可使用Sleep函数。该函数使线程休眠DelayInMilliseconds毫秒。

  • SetTimer [, Label, Period|On|Off, Priority]

AHK提供了计时器SetTimer,以指定的时间间隔自动并重复运行子程序。Label为计时器打开后跳转到的标签,遇到Return后结束。Period为循环的周期,经过周期后计时器再次运行标签后的代码块,设置为off时停止计时器。

计时器停止后会继续运行该句之后的代码块,而不会回到设定时的代码处。注意:第一次跳转时也会等待。
定时器特点是异步,可以同时打开多个定时器,执行多种循环,在等待期间不会使线程休眠。但是新的计时器不会增加线程数,而是在等待期间被其他的指令中断。

但是请注意,遇到return结束时,会释放所有变量,所以无法将非全局的变量的值保存到下一次循环中,因此请配合全局变量使用。AHK的全局变量声明为Global

  1. 变量

AHK中的变量无需定义以及设定类型。在使用变量时,通常需要将变量名用一对%%包住,表示其是一个变量而非字符串,如以下语句就包含了3个在函数中使用的变量。

WinMove,ahk_id %HWND%, ,%Virtualx1%,%Virtualy1%,

特例是一下几个情况时无需加%%

ShowTipwithTimefuc(timeleft)
If (Var1 <> Var2)
    Var1 := Var2 + 100

在变量作为参数或者输出变量时,以及在表达式中是无需加%%的。这个多写一写就明白了。

在表达式中,赋值时请使用:=代替=,:=是更为准确的赋值,如:

Test:=0

对于字符串,在作为函数参数或在表达式中需要加“”:

TextNow="Replay"
SB_SetText("`t无任务")
GuiControl, Text,Text1,已获得窗口ID

添加转义字符等参考帮助文档。如`t为换行。

二、坐标

AHK中的坐标是关于屏幕操作的部分。如图,AHK中有多种坐标系,在所有关于坐标的函数中,都有关于坐标模式(坐标系)的问题,默认坐标模式为Windows,即相对活动窗口左上角的坐标。使用CoordMode改变其坐标模式。

三、常用基本函数

  • MouseGetPos, [OutputVarX, OutputVarY, OutputVarWin, OutputVarControl, 1|2|3]

MouseGetPos获取鼠标光标的当前位置以及鼠标当前悬停的窗口和控件信息。 参数OutputVarX, OutputVarY为对应窗口的左上角XY坐标。OutputVarWin保存控件的HWND,OutputVarControl保存控件的ClassNN(类名)。

HWND是标识窗口的一种唯一ID(ahk_id),使用该ID在其他与窗口有关的函数中确定窗口,很常用。

  • CoordMode, ToolTip|Pixel|Mouse|Caret|Menu [, Screen|Window|Client]

CoordMode函数设定了坐标模式,第一个参数指定了用于什么功能,例如Pixel为作用于ImageSearchMouse作用于Click。第二个参数指定了是什么模式,Screen表示坐标相对屏幕,也就是绝对坐标,Window表示相对活动窗口,Client表示相对于活动窗口的工作区。

在使用所有与坐标相关的函数时请注意设定坐标模式。

  • MsgBox, Text
  • MsgBox [, Options, Title, Text, Timeout]

Msgbox在含有一个或多个按钮(例如“是”和“否”)的小窗口中显示指定的文本 。Options参数可以改变消息框的细节,如是否有按钮等待,具体请查找帮助文档。


如图便是一个带有确定按钮的消息框,代码为:MsgBox,,1,消息框,这是内容

  • ToolTip [, Text, X, Y, WhichToolTip]

ToolTip提供一个类似注脚的窗口,并总是置顶。Text参数为内容,设置为空时会消除对应ToolTip 。X,
Y
为该窗口的坐标,置空时总是出现在鼠标当前位置。WhichToolTip为ToolTip的序号,用于同时使用多个ToolTip。

在这里插入图片描述
ToolTip生成时便不会再改变位置,需要不断消除、重新生成ToolTip来构造一个会移动的ToolTip。可以配合SetTimer使用。如图便是一个简单的ToolTip,代码是ToolTip,这是ToolTip

  • Run, Target [, WorkingDir, Max|Min|Hide|UseErrorLevel, OutputVarPID]

Run函数运行外部程序。Target是要运行的文档, URL, 可执行文件 (.exe, .com, .bat, 等等), 快捷方式 (.lnk)

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 你可以在 Autohotkey 脚本内使用 Reload 函数来重新加载它自己。该函数的语法如下: Reload 使用该函数的示例如下: ^r:: Reload return 上面的示例中,当用户按下 "Ctrl + R" 组合键时,脚本将会重新加载自身。 ### 回答2: AutoHotkey(简称AHK)是一种自动化脚本语言,常用于自动化操作、自定义快捷键等。如果你想要让一个AHK文件在运行时重新加载自己,可以使用以下方法。 首先,在你的AHK脚本中添加一个快捷键绑定,用于触发重新加载。你可以选择任意一个你喜欢的快捷键,比如"Ctrl + Alt + R"。添加以下代码可以实现这个功能: ^!r:: Reload return 第一行代码中的"^"代表Control键,"!"代表Alt键,"r"代表"R"键。所以 "^!r"即为"Ctrl + Alt + R"。第三行的"Reload"命令用于重新加载脚本。 将以上代码添加至你的AHK脚本中,保存修改。 接下来,在你打开的AHK脚本中,按下设置的快捷键"Ctrl + Alt + R"即可重新加载脚本。这样,你就不需要关闭脚本再重新打开它了,可以直接加载修改后的内容。 需要注意的是,重新加载脚本会终止当前脚本的执行,并重新启动脚本。 希望以上解答对你有所帮助。如有其他问题,请随时提问。 ### 回答3: 要让AutoHotkeyAHK)文件重新加载自己,你可以使用AHK内置的Reload函数。Reload函数可以重启当前运行的脚本,即重新加载脚本文件。 你可以在脚本文件的任何位置使用Reload函数来实现重新加载。以下是一个示例: ```autohotkey ^!r:: Reload return ``` 上述代码将Ctrl+Alt+R绑定到Reload函数。当你按下这个组合键时,AHK脚本会重新加载。 如果你想要自动重载脚本,你可以将Reload函数与文件监视器结合使用。文件监视器可以监视脚本文件的任何更改,并在更改后自动重新加载。 以下是一个将文件监视器与Reload函数结合使用的示例: ```autohotkey #Persistent SetTimer, ReloadCheck, 1000 return ReloadCheck: If (FileExist("脚本文件的完整路径")) { FileGetTime, currentModified, 脚本文件的完整路径 If (currentModified != previousModified) { Reload } } previousModified := currentModified return ``` 在上述代码中,我们首先设置了一个持续的定时器(SetTimer),它每秒钟检查一次脚本文件是否有更改。然后,我们使用FileExist和FileGetTime函数来获取脚本文件的最新修改时间,如果最新修改时间与之前保存的修改时间不同,则重新加载脚本。 请注意,你需要将代码中的"脚本文件的完整路径"替换为你实际的脚本文件路径。 这些是使用AutoHotkey重新加载脚本的两种方法。希望对你有帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值