文章目录
autoHotKey是一款windows自动化快捷键工具,有1.0和2.0版本,推荐2.0。
本来想用这个编辑拳皇宏的,实测效果根本达不到要求,只能做些简单的事情了。
2.0和1.0版本的区别
| 项目 | v1 写法 | v2 写法 |
|---|---|---|
| 热键 | F1:: |
F1:: { ... } |
| 结束 | 需要 return |
多行热键用 {} 包起来,不再需要 return |
| 发送按键 | Send, {a down}{b down} |
Send "{a down}{b down}" |
| 变量 | %var% |
var |
| 赋值 | = |
:= |
| 条件 | If var = 1 |
if (var = 1) |
| 错误处理 | ErrorLevel |
try / catch |
示例-剪映中f1映射右方向键
c
#Requires AutoHotkey v2.0
; 仅在剪映窗口处于前台激活状态时,热键才生效
#HotIf WinActive("ahk_exe JianyingPro.exe")
F1:: {
Send "{Right}"
; 如果需要更精准的按键间隔,可以加上 Sleep 50 (等待50毫秒)
}
#HotIf
示例-剪映中按f9触发弹框
c
#Requires AutoHotkey v2.0
#HotIf WinActive("ahk_exe JianyingPro.exe")
F9:: {
MsgBox "你刚刚按下了 F9,剪映当前在前台。"
}
#HotIf
示例-拳皇97
站a
c
{
Send "{j down}"
Sleep(36)
Send "{j up}"
}
下b(难)
前冲
注:外部按键不能和宏冲突,否则宏定义优先。
N键触发,效果为前跑。
c
#Requires AutoHotkey v2.0
; 测试站轻拳 v2 版本
#HotIf WinActive("Kawaks")
N::
{
Send "{d down}"
Sleep(30)
Send "{d up}"
Sleep(45)
Send "{d down}"
Sleep(80)
Send "{d up}"
}
return
#HotIf
实测成功率60%左右,有时跑不起来,搞不懂什么机制。
示例-帧数计数器
需求:
1、winkawaks模拟器中,shift+空格,按一下帧数加1,来实现统计帧数。
2、当按shift+N时,重置为第1帧(用于找到关键点后的后续统计)。
注:这里用到了gui界面,值得参考。
代码:
c
; winkawaks_frame_v3.ahk
; AutoHotkey v2
#Requires AutoHotkey v2.0
#SingleInstance Force
frame := 0
; 创建悬浮数字窗口
frameGui := Gui("+AlwaysOnTop -Caption +ToolWindow +E0x20")
frameGui.BackColor := "000000"
frameGui.SetFont("s30 bold cWhite", "Microsoft YaHei")
; 宽度适当加宽,防止文字显示不全
frameText := frameGui.AddText("w300 h50 Center", "第 0 帧")
; 位置向左平移,靠右上角
frameGui.Show("x" (A_ScreenWidth - 800) "y200 NA")
#HotIf WinActive("ahk_exe WinKawaks.exe")
; Shift + 空格:透传给游戏并计数
+Space:: {
global frame, frameText
Send "{Blind}{Space}"
frame++
frameText.Text := "第 " frame " 帧"
}
; Shift + N:重置为 1
+N:: {
global frame, frameText
frame := 1
frameText.Text := "第 1 帧"
}
#HotIf
效果如图:

常见用法
| 写法 | 含义 | 示例 |
|---|---|---|
F1:: |
按 F1 触发 | F1::Send "{Right}" |
^a:: |
按 Ctrl+A 触发 | ^a::Send "你好" |
!a:: |
按 Alt+A 触发 | !a::Run "notepad" |
#a:: |
按 Win+A 触发 | #a::MsgBox "Hi" |
; |
注释,不会被执行 | ; 这是注释 |
Sleep 500 |
等待 500 毫秒 | Sleep 500 |
Run "程序路径" |
打开程序或文件 | Run "D:\Code" |
MsgBox "文字" |
弹出提示框 | MsgBox "测试" |
Send "文字" |
模拟输入文字 | Send "hello" |
Send "{Right}" |
模拟按右方向键 | Send "{Right}" |
#(井号)的作用
1、#+指令
2、#+快捷键
::(双冒号)的作用
::(双冒号)用来定义快捷键,左边是快捷键,右边是定义的内容。
bash
如:
F1::Send "{Right}"
按f1时发送right(按键)指令。
F1 # 定义的快捷键
:: # 快捷键标志
Send # 快捷键对应的操作
常用指令
| 指令 | 作用 | 例子 |
|---|---|---|
Send |
模拟按键 | Send "{Right}"、Send "{Enter}" |
SendText |
发送普通文本 | SendText "你好" |
Run |
打开程序、文件或网址 | Run "notepad.exe" |
Sleep |
等待一段时间 | Sleep 500 表示等 500 毫秒 |
MsgBox |
弹出提示框 | MsgBox "测试" |
WinActivate |
激活指定窗口 | WinActivate "剪映" |
WinWaitActive |
等待某个窗口激活 | WinWaitActive "ahk_exe xxx.exe" |
WinClose |
关闭窗口 | WinClose "记事本" |
WinMove |
移动或调整窗口大小 | WinMove "A", 0, 0, 960, 1080 |
MouseMove |
移动鼠标 | MouseMove 500, 300 |
Click |
模拟鼠标点击 | Click |
Loop |
循环执行 | Loop 3 { ... } |
if / else |
条件判断 | if (x = 1) { ... } |
注释
1、;开头表示单行注释
2、/* */表示多行注释
c
;这是单行注释
/*
这段代码暂时不用
*/
特殊键有哪些
send后面需要用{}(大括号)包起来的特殊键如下。
| 写法 | 含义 |
|---|---|
{Enter} |
回车 |
{Tab} |
Tab |
{Space} |
空格 |
{Escape} / {Esc} |
Esc |
{Backspace} / {BS} |
退格 |
{Delete} / {Del} |
删除 |
{Up} / {Down} / {Left} / {Right} |
上下左右方向键 |
{Home} / {End} |
行首 / 行尾 |
{PgUp} / {PgDn} |
上翻页 / 下翻页 |
{F1} ~ {F24} |
功能键 |
{PrintScreen} |
截屏键 |
{Insert} / {Ins} |
插入键 |
{CapsLock} / {NumLock} / {ScrollLock} |
大小写、数字锁、滚动锁 |
{LWin} / {RWin} |
左/右 Win 键 |
{LAlt} / {RAlt} |
左/右 Alt |
{LShift} / {RShift} |
左/右 Shift |
{LControl} / {RControl} |
左/右 Ctrl |
是否支持多开?
支持多开,如果多个按键有冲突,会覆盖。
例如:a.ahk和b.ahk都定义了同一热键,谁最后加载谁生效。
注:如下两个操作都可以加载
1、启动脚本
2、reload脚本 # 别忽略掉这个
其他
文档
官网地址(可以访问,速度不算快,但是够用):
2.0版本文档():