本文内容来自AutoHotkey官方教程(一)
准备
下载地址
创建脚本
右键-新建-AutoHotkey Script
示例
^j::
Send, My First Script
Return
^j::
是热键,^
表示Ctrl,::
左边的字符表示需要按下的热键。
Send
是命令,任何在逗号之后的内容将会被键入。
Return
将停止执行之后的代码。
快捷键&热字串
快捷键用于触发某些动作,热字串主要用于扩展缩写等。
热键是通过一对::
创建的,按键名和组合名必须在::
左边,代码跟在后面,以Return结束。
热字串在要触发的文本两边都有::
,替换后的文本在第二对右边。
常用符号
符号 | 描述 |
---|---|
# | Win |
! | Alt |
^ | Ctrl |
+ | Shift |
& | 用于连接两个按键(含鼠标按键)合并成一个自定义热键。 |
窗口特定热键/字符串
#IfWinActive
#IfWinExist
比如我在用Typora
#IfWinActive ahk_exe Typora.exe
示例
::btw::By the way ; 替换"btw"为"By the way", 当你按下结束符的时候.
:*:btw::By the way ; 替换"btw"为"By the way"而不需要按下结束符.
^n:: ; Ctrl+N 热键.
Run, notepad.exe ; 当你按下Ctrl+N, 将启动记事本.
Return ; 热键内容结束, 这之后的内容将不会触发.
^b:: ; Ctrl+B 热键
Send, {ctrl down}c{ctrl up} ; 复制选定的文本. 也可以使用 ^c, 但这种方法更加可靠.
SendInput, [b]{ctrl down}v{ctrl up}[/b] ; 粘贴所复制的文本, 并在文本前后加上加粗标签.
Return ; 热键内容结束, 这之后的内容将不会触发.
发送按键
但使用Ctrl或Enter等按键作为热键时,不要将它们括在{}中,在使用Send命令时,如果不在特殊按键列表中,没有必要加上花括号。
如果要发送一段很长的文本,可以使用延续片段。
打开程序或网页
使用Run命令!
示例
; 一些程序并不需要完整路径, 如 Windows 标准程序.
Run, notepad.exe
Run, msPaint.exe
; 使用 AHK 内置变量来打开"我的文档"
Run, %A_MyDocuments%
; 打开一些网页
Run, https://autohotkey.com
Run, http://www.google.com
命令和函数
命令
命令后的参数无需使用圆括号,而函数需要。
Command, 参数1, 参数2, 参数3
不能将几条命令放在同一行,也不能将一个命令作为参数插入到另一个命令。
使用参数时,要在参数前后加上%,命令的参数不能运算。
函数
需要圆括号。
Function(参数1, 参数2, 参数3)
可以使用运算,参数前后不需要%,可以嵌套其他函数,文本前后需要加上双引号。
函数通常会有返回值,命令需要设置OutputVar参数来保存结果。
代码块
用{}包围,AutoHotkey据此判断这些代码是一个整体。
变量
传统文本赋值
MyVar = text
传统变量赋值
MyVar = %MyWar2%
传统混合赋值
MyVar = %MyVar2% some text %MyVar3%
表达式文本赋值
MyVar := "Text"
表达式变量赋值
MyVar := MyVar2
在表达式模式中,变量不需要百分号。
表达式数字赋值
MyVar := 6 + 8 / 3 * 2 - Sqrt(9)
表达式混合赋值
MyVar := "The value of 5 + " MyVar2 " is: " 5 + MyVar2
需要使用百分号的场合
- 使用命令时(参数是输出变量OutputVar或输入变量InputVar时除外。)
- 使用传统模式(等号前面没有其它符号) 给一个变量赋值时。
不要使用百分号的场合
- 参数中的输入或输出变量. 例如:
StringLen, OutputVar, InputVar
。 - 赋值时左边的变量: 例如:
Var = 123abc
。 - 在传统 If 语句(不包括表达式) 中, 中左边的变量:
If Var1 < %Var2%
。 - 在表达式中的变量。
获取用户输入
使用InputBox命令
InputBox, OutputVar, Question 1, What is your first name?
if (OutputVar="Bill")
MsgBox, That's an awesome name`, %OutputVar%.
InputBox, OutputVar2, Question 2, Do you like AutoHotkey?
if (OutputVar2 = "yes")
MsgBox, Thank you for answering %OutputVar2%`, %OutputVar%! We will become great friends.
else
MsgBox, %OutputVar%`, That makes me sad.
对象
变量的集合(键-值)
创建对象
方括号语法
MyObject := ["one", "two", "three", 17]
创建了索引数组。
大括号语法
Banana := {"Color": "Yellow", "Taste": "Delicious", "Price": 3}
创建了关联数组。
数组函数
MyObject := Array("one", "two", "three", 17)
与方括号类似,但采用函数形式。
对象函数
Banana := Object("Color", "Yellow", "Taste", "Delicious", "Price", 3)
与大括号类似,但采用函数形式。
使用对象
设置值
方括号表示法
Banana["Price"] := 3
句点表示法
Banana.Consistency := "Mushy"
检索值
方括号表示法
Value := Banana["Color"]
句点表示法
Value := Banana["Color"]
增加键值
方括号表示法
MyObject["NewerKey"] := 3.1415
句点表示法
MyObject.NewKey := "Shiny"
InsertAt
MyObject.InsertAt(Index, Value1, Value2, Value3...)
Push
MyObject.Push(Value1, Value2, Value3...)
移除键值
空白填充(键仍然存在)
Banana.Consistency := ""
删除法
RemovedValue := MyObject.Delete(AnyKey)
NumberOfRemovedKeys := MyObject.Delete(FirstKey, LastKey)
Pop
MyObject.Pop()
删除最高的整数键, 并返回这个键对应的值。
RemoveAt
RemovedValue := MyObject.RemoveAt(Index)
NumberOfRemovedKeys := MyObject.RemoveAt(Index, Length)