AutoHotkey教程

本文内容来自AutoHotkey官方教程(一)

准备

下载地址

Donwload

创建脚本

右键-新建-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

#InWin指令

示例

::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)