分享

windows的终极自动化脚本——AHK

 CHENYUMEN 2023-07-28 发布于云南

相信大部分人都使用过windows系统,大部分的操作是通过键盘和鼠标来完成的。对于不同软件,键盘快捷键也千差万别。比如eclipse和idea的快捷键,好在idea有个keymap能选择eclipse键盘模式,映射eclipse的快捷键。但是大部分软件是没有互通的操作的。还有玩游戏的时候,一些连招操作需要鼠标和键盘有序配合才能实现,能不能自定义一套自己的输入习惯呢?

图片

[eclipse和idea部分快捷键对比]

这个东西就是AHK,全称AutoHotKey,是一种windows下的热键脚本语言,通过把常用的键盘鼠标操作编写成脚本语句(.ahk文件)来动态调用的方式避免了每次手动输入的重复操作,提高了使用计算机的工作效率。

PS:由于不需要太深的编程知识,本文只作简单介绍,有兴趣可以自行上AutoHotKey中文网[1]交流学习。

图片

中国AutoHotkey发展史[2]

AutoHotkey国内最早起源于2005年,兴起于2007年。2009 年 9 月,AutoHotkey 到了 1.0.48.05 版本(当前所称的经典版),但更新此时进入停滞状态。

幸运的是从 2008 年 7 月开始,AutoHotkey_L(当时为旁支,目前成为主分支)的开发进入活跃期(开源的福利),之后合并 AutoHotkey64、AutoHotkeyU(添加 64 位和 Unicode 支持)并增加 COM、对象等支持。在 2010 年 10 月,Chris(经典版作者)表示不再开发并宣布 AutoHotkey_L 为其后续分支。


宏(Macro)是一种批量处理的称谓。绝大多数情况下,“宏”这个词的使用暗示着将小命令或动作转化为一系列指令,作为一个单独命令完成一个特定任务。如Word就是使用宏语言Visual Basic将宏作为一系列指令来编写。除了宏语言,还有键盘宏。键盘宏在图形用户界面被交互式地使用。使用它们可以用简短的击键代替冗长的命令序列,并为重复性任务提供了一个简单的自动化形式。程序员的文本编辑器Emacs(“编辑宏”[Editing MACroS]的简称)是沿用这一思想的产物。事实上,大多数编辑器是由宏组成的。Vim也允许用户录制和播放简单的键盘宏。

AutoHotKey也是一种宏,利用一系列命令操作完成特定功能,减少和简化重复性工作。


前置条件

要想自己编写ahk脚本,需要先去AutoHotKey官网[3]下载AutoHotKey并安装。


编写脚本

在要存储脚本的文件夹下鼠标右键新建AutoHotKey Script

图片

右键新建的ahk文件,会多出三个菜单Run Script(运行)、Complie Script(编译)、Edit Script(编辑)。

我们首次选择Edit Script,写下下面的代码:






#n::Run Notepad
886::再见!;发送内容到活动 (最前面的) 窗口.return

这段代码的意思是(1)按住键盘Win+n(被称作热键)会立马打开一个新的记事本;(2)在QQ或任何允许文本内容的地方按下886(被称为热字串)会输出“再见!”。

编辑完成后保存文件,然后右键Run Script后右下角托盘会出现绿色H图标,表示运行成功,可以使用上述功能了。如果想长期使用可以右键Complie Script编译成同名的exe可执行文件,它会把AutoHotKey环境和编辑的脚本打包在一起,可以分享给没有安装AutoHotKey环境的windows电脑上使用。如果不想使用,则右键托盘的图标选择exit退出即可。


语法

通过上面的例子,可以发现语法规则不是太复杂,其中双冒号就是映射标志,类似于js里的函数字段function。双冒号左边是键盘,支持多个组合键,比如#(Win)和n。双冒号后面对应热键的输出结果,如果单行内容可以直接写,也可以换行连续书写多行,最后以return结尾。命令和变量的名称是不区分大小写的。'Run'等同于'run'。以下均来自国人翻译的AutoHotKey中文指南[4]

符号含义
#Win
!Alt
^Ctrl
+Shift
&组合任意两个按键或鼠标按钮
<使用成对按键中左边的那个,如<!表示只使用左边的Alt才触发
>使用成对按键中右边的那个,如<+表示只使用右边的Shift才触发
*通配符,常与重映射按键或按钮组合使用,如*#c::Run Calc.exe会使Win+c、Ctrl+Win+c等都能打开内置计算器。
~激发热键时,不会屏蔽(被操作系统隐藏)热键中按键原有的功能。
$通常只在脚本使用Send命令发送包含了热键自身的按键时才需要使用此符号
UP跟在热键名后面使得在释放按键时触发热键。
DOWN跟在热键名后面使得在按下时触发热键。
MButton鼠标中键
WheelUp鼠标滚轮向上滚
WheelDown鼠标滚轮向下滚
Numpad0小键盘数字0

变量

AutoHotkey中没有明确的变量类型,只包含数字 (可以含有小数点) 的变量进行数学运算或比较时, 会被自动转换为数值。变量名不区分大小写,可以由字母, 数字以及# _ @ $标点组成。

要把字符串或数字保存到变量中,有两种方法:

  • 传统方法使用 等号运算符 (=) 来指定,没有加引号的原义字符串或包围在百分号中的变量,例如:



MyNumber = 123MyString = This is a literal string.CopyOfVar = %Var%  ; 和 = 运算符一起使用时, 需要使用百分号来获取变量的内容
  • 表达式方法使用冒号等号运算符 (:=) 来保存数字,加引号的字符串和其他类型的表达式:



MyNumber := 123MyString := 'This is a literal string.'CopyOfVar := Var ; 和前面段落中与其作用相同的语句不同, 百分号不和 := 运算符一起使用.

后一种方法由于其更清晰并且与其他许多语言几乎一致的表达式语法,成为大多数人的首选方法。

获取变量的内容也有两种方法:

  • 传统方法需要将变量名包围在百分号中来获取变量的内容,例如:


MsgBox The value in the variable named Var is %Var%.CopyOfVar = %Var%
  • 表达式方法省去了变量名两边的百分号,但原义的字符串必须包围在双引号中:


MsgBox % 'The value in the variable named Var is ' . Var . '.' ; 使用句点连接两个字符串.CopyOfVar := Var

流程控制

  • 条件











if (x < y) {    ...}if WinExist('Untitled - Notepad') {    WinActivate}if IsDone {    ...} else {    ...}
  • 循环

以下循环体内都能使用breakcontinue

(1)Loop







Loop {;无限循环... }Loop %n% {;循环n次...}

(2)While





while GetKeyState('LButton')    {        ...    }

(3)For







; 列出对象中的键值对:colours := Object('red', 0xFF0000, 'blue', 0x0000FF, 'green', 0x00FF00); 上面的表达式可以直接代替下面的“colours”:for k, v in colourss .= k '=' v '`n'MsgBox % s

其他

AutoHotkey还有许多其他的语法和规则,还能操作磁盘文件、剪贴板Clipboard、创建图形GUI、MsgBox、InputBox对话框、数学计算、屏幕管理、注册表操作等等。


应用

其实我一直认为不同的人使用相同的程序语言和规则,能玩出不同的花样,不得不说大家善于发掘!以下都是我用过感觉不错的AutoHotkey应用,大都文件很小。

  • traymond[5]

在目标窗口(我一般用于cmd进程的程序)按下Win+Shift+z可以快速隐藏到托盘里,点击托盘图标能快速还原。适合现场部署带有不能关闭的cmd命令程序。

  • wgestrues

鼠标手势操作,很丰富,支持自定义,适合鼠标流的人群。(我还是坚实的键盘流😂)

  • MouseInc[6]

小巧好用的鼠标手势。

  • Qucker[7]

国产软件,为常用操作建立捷径,支持云端存储和分享,还有很多人每天贡献新的动作库,需要登录,同时支持移动端。

图片
  • OneQuick

自带的windows商店可下载,可对屏幕边缘进行操作,自定义热键和热字串。美中不足,也有可能是我本地环境问题,有时候会无故重置。

图片
  • RunZ[8]

专业的快速启动工具,集成了翻译、中文文件首字母快速查找等功能,也是国人作品,适合键盘流。

图片

(完)

参考资料

[1]

AutoHotKey中文网: https://www./

[2]

中国 AutoHotkey 发展史: https:///ahk-history-china.htm

[3]

AutoHotKey官网: https://www./

[4]

AutoHotKey中文指: http://ahkcn./docs/

[5]

traymond: https://github.com/fcFn/traymond

[6]

MouseInc: https:///project/mouseinc/

[7]

Quicker: https://www./

[8]

RunZ: https://github.com/goreliu/runz

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多