AutoHotKey
AutoHotKey
目录
常用命令
输入识别类
热键
^j::
Send, My First Script
Return
热字符串
::ftw::Free the whales
判断窗口
; 无标题 - 记事本
#IfWinActive Untitled - Notepad
!q::
MsgBox, You pressed Alt+Q in Notepad.
Return
; 任何不是无标题 - 记事本的窗口
#IfWinActive
!q::
MsgBox, You pressed Alt+Q in any window.
Return
输出命令类
通用格式
Command, 参数1, 参数2, 参数3
Send
^j::
Send, My First Script
Return
SendInput
和Send可能没区别?
SendInput, inside the ctrl{+}j hotkey
MsgBox
::btw::
MsgBox You typed "btw".
Return
Run 运行
Run, Notepad.exe
; 运行一个程序. 注意: 大部分的程序可能需要完整路径.
Run, %A_ProgramFiles%\Some_Program\Program.exe
; 打开一个网址
Run, https://autohotkey.com
; 一些程序并不需要完整路径, 如 Windows 标准程序.
Run, notepad.exe
Run, msPaint.exe
; 使用 AHK 内置变量来打开 "我的文档"
Run, %A_MyDocuments%
; 打开一些网页:
Run, https://autohotkey.com
Run, https://www.google.com
Winactivate 激活窗口
Winactivate, Untitled - Notepad ; 无标题 - 记事本
WinWaitActive
WinWaitActive, Untitled - Notepad ; 无标题 - 记事本
内置函数类
通用格式
Function(参数1, 参数2, 参数3)
例如
SubStr(37 * 12, 1, 2)
SubStr(A_Hour - 12, 2)
MyVar := SubStr("I'm scripting, awesome!", 16)
和命令的区别
; 这些是命令
MsgBox, This is some text.
StringReplace, Output, Input, AutoHotKey, AutoHotkey, ALL
SendInput, This is awesome{!}{!}{!}
; 这些是函数
SubStr("I'm scripting, awesome!", 16)
FileExist(VariableContainingPath)
Output:=SubStr("I'm scripting, awesome!", 16)
代码块
if (MyVar=5)
{
MsgBox, MyVar equals %MyVar%!!
ExitApp
}
if (MyVar = 5)
MsgBox, MyVar equals %MyVar%!!
ExitApp
变量
MyVar = Text ; 传统文本赋值
MyVar = %MyVar2% ; 传统变量赋值
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 ; 表达式混合赋值
百分号
输出变量时要用,例如
MyVar = %MyVar2% some text %MyVar3%.
获取用户输入
对象
创建
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["Pickled"] := True
Banana.Consistency := "Mushy"
Value := Banana["Color"]
Value := Banana.Color
MyObject["NewerKey"] := 3.1415
MyObject.NewKey := "Shiny"
MyObject.InsertAt(Index, Value1, Value2, Value3...)
MyObject.Push(Value1, Value2, Value3...)
Banana.Consistency := ""
RemovedValue := MyObject.Delete(AnyKey)
NumberOfRemovedKeys := MyObject.Delete(FirstKey, LastKey)
MyObject.Pop()
RemovedValue := MyObject.RemoveAt(Index)
NumberOfRemovedKeys := MyObject.RemoveAt(Index, Length)
其他
输出技巧类
发送按键
用{}
括起来,不要括非按键
长文本
Send,
(
Line 1
Line 2
Apples are a fruit.
)
其他技巧
双击 长按
https://www.zhihu.com/question/451803614
Space::
Loop ; 循环,0.4s内松开键 或 按住键超过0.4s后退出循环,state值为短按或长按的结果
{
sleep, 20
state := GetKeyState("Space","P") ; 是否按住Space
if (state = 0)
{
break
}
if (A_TimeSinceThisHotkey>400)
{
break
}
}
if (state = 0) ;短按
{
if (A_PriorHotkey != "Space" or A_TimeSincePriorHotkey > 400) ; 分别保留上次的热键名和时间
{
count := 1
ToolTip, Click ;单击
}
else
{
count++
if (count = 2)
{
ToolTip, Double Click ;双击,单击时的代码仍被执行一次
}
else if (count = 3)
{
ToolTip, Tri Click ;三击,单击和双击的代码仍被执行一次
}
else
{
ToolTip, More Click ;多击
}
}
}
else ;长按
{
;----长按代码段-----
ToolTip, Long Click
;------------------
KeyWait, Space ;这句不能删,等待按键或鼠标/操纵杆按钮被松开或按下
}
return
经验
key1:: ; 一直检测
key1 up:: ; 仅检测抬起
key1::
KeyWait key ; 仅检测按下
链接到当前文件 0
没有文件链接到当前文件