AutoHotkey,简称AHK,是一种Windows免费开源脚本语言。允许用户轻松快速创建各种简单或复杂的脚本任务来完成自动化操作,比如快速输入字符串、创建自定义热键、键盘改键、模拟鼠标操作等。
官网:https://www.autohotkey.com/
教程:快速参考 | AutoHotkey v2
安装
在官网下载AHK v2.0,安装后打开AHK(开始菜单中的AutoHotKey Dash),点击“New script”,弹出“New Script”对话框,输入文件名称和文件夹路径,点“Edit”按钮即可在相应文件夹下创建AHK文件,文件后缀为.ahk。
题外1:AHK代码简单,可以使用记事本(Notepad)打开查看,但终归是程序语言,推荐使用具有代码高亮功能的Notepad3、vs-code、ATOM等软件,抵制Notepad++(notepad++到底做了什么导致国内编程界一片抵制的声音)
题外2:如果想某个脚本在开机的时候自动启动,可将文件或文件的快捷方式放在启动文件夹中:C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
自定义热键
基本结构:快捷键:: run "要执行的语句"
快捷键:: send "要执行的语句"
先输入快捷键,然后是双英文冒号,然后是run或send等命令,命令后面的引号中为执行语句
快捷键:分别用#、!、^、+表示Win、Alt、Ctrl、Shift键,然后直接加其他按键,如“#a”表示同时按下Win和a键,“^s”表示同时按下Ctrl和s键,“#!w”表示同时按下Win、Alt和w键,“^!+7”表示同时按下Ctrl、Alt、Shift和7键。快捷键也支持非这四类键构成的组合键,但需要用&连接,如“a & 5”表示同时按下a和5键,“F12 & o”表示同时按下F12和o键。按键支持键盘上除Fn外的任何按键以及鼠标键,有些特殊按键可能不太明确其名称,如Backspace、Enter、LButton、WheelDown等分别指代退格键、回车键、鼠标左键、鼠标滚轮向下滚顶等,可参考按键列表(键盘, 鼠标和控制器) | AutoHotkey v2
run命令:后面的引号中可以是软件、网站或文件夹,如https://www.zhaozhitong.com
send命令:后面的引号中可以是按键或按键组合,如^c
;定义Win+n为打开NotePad的快捷键
#n::Run "notepad"
;定义Ctrl+Shift+c为打开文件夹的快捷键
^+c:: run "C:\Program Files\Microsoft"
;定义F1为打开网站百度的快捷键
F1:: run "https://www.baidu.com"
;定义F2为复制内容的快捷键,而通常的复制快捷键为Ctrl+c
F2:: send "^c"
注意1:单行内容直接写完,多行内容的话写入{}中
注意2:命令的名称是不区分大小写的。"Run"等同于"run"
发送/替换自定义文本内容
基本结构:::原来的字符::要替换的字符
:*:原来的字符::要替换的字符
用4个英文冒号将要替换的字符放在中间,在冒号后面放希望替换后的字符,这样在输入原来的字符后按空格、回车或者Tab键,原有的内容就会自动替换成设定的字符。如果想实现输入指定字符后不按任何按键就自动替换,可以在前面两个冒号中间加*。
;输入btw,自动变成By the Way
::btw::By the Way
;输入zhrq,自动变成当前日期(2023-02-18形式)
:*:zhrq::{
a := FormatTime(A_Now,"yyyy-MM-dd")
send a
}
高级用法
AutoHotkey有许多其他的语法和规则,能操作磁盘文件、剪贴板Clipboard、创建图形GUI、MsgBox确认框、InputBox对话框、数学计算、屏幕管理、注册表操作等等。具体教程可参考快速参考 | AutoHotkey v2
;按下Win+z,实现当前窗口置顶或取消置顶
#z:: WinSetAlwaysOnTop -1, "A"
;按下Ctrl+Alt+Shift+],实现无格式粘贴
^!+]:: {
ClipSaved := ClipboardAll()
A_Clipboard := A_Clipboard
Send "^v"
sleep 100
A_Clipboard := ClipSaved
ClipSaved := ""
}
;按下F4,用百度搜索选中的内容
F4:: {
Send "^c"
sleep 100
run "https://www.baidu.com/s?ie=UTF-8&wd=" A_Clipboard
}
;任务栏调音量及静音
#HotIf MouseIsOver("ahk_class Shell_TrayWnd")
WheelUp::Send "{Volume_Up}"
WheelDown::Send "{Volume_Down}"
MButton::Send "{Volume_Mute}"
MouseIsOver(WinTitle) {
MouseGetPos ,, &Win
return WinExist(WinTitle " ahk_id " Win)
}
;创建只有在记事本处于活动状态时才生效的两个热键和一个热字符串, 而一个热键则适用于除记事本以外的任何窗口
#HotIf WinActive("ahk_class Notepad")
^!a::MsgBox "You pressed Ctrl-Alt-A while Notepad is active."
#c::MsgBox "You pressed Win-C while Notepad is active."
::btw::This replacement text for "btw" will occur only in Notepad.
#HotIf
#c::MsgBox "You pressed Win-C in a window other than Notepad."