添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

下载安装完以后会自带详细的英文版文档说明,不过官网上有 亲民的中文版文档 ~

AHK脚本的后缀名为 .ahk ,比如 Hello.ahk 。打开创建的脚本文件编写代码即可。对于编写脚本语言,合适的编辑器不可少,这里我找到以下这些:

  • SciTE4AutoHotkey
  • Notepad++(在语言中选择Autolt可以高亮语法)
  • 当然在 VScode 里肯定也少不了对应的插件
  • 0x01 AHK的基本语法

    变量和表达式

    一开始没有仔细看文档说明,上来直接使用常规语言的赋值方法,结果发现AHK的思路好反人类。在AHK中,变量的赋值和获取方式有两种 传统方法 和 __表达式方法__(推荐后者)。

    __传统方法__(=)

    这种方法赋值似乎会默认为字符串赋值,比如

    1
    2
    3
    4
    5
    a = 100     ; 字符串类型的 100
    b = 一百 ; 字符串无疑

    c = %a% ; 传统方法需要用%%提取变量中的值
    MsgBox The value of c is %c% .

    用惯了C++、Python等类型分明的语言,一接触传统方法一定会抓狂。所以推荐 表达式方法

    __表达式方法__(:=)

    赋值的语法和其他语言相同,不过就是在 = 前面多了一个 :

    这样,就可以将一个数字方便地赋值给一个变量啦

    1
    2
    3
    4
    5
    a := 100    ; 数字 100
    b := 一百 ; 字符串无疑

    c := a ; 表达式方法直接复制即可。原因是变量在表达式中
    MsgBox % "The value of c is " . c ; 使用类似与Python中的 `.join` 连接字符串

    对于百分号的使用,文档中有一句话

    注意: 变量名并非 总是 用百分号括起来; 百分号只在变量名和不加引号的文字一起时才需要. 除了创建 动态变量引用 动态函数调用 之外, 不应在其他任何地方使用百分号.

    内置变量

    和PHP一样,AHK有很多的变量可以方便的获取很多信息,比如时间日期、脚本自身的属性。过多不贴

    Send 发送键

    Send键可以做很多事,比如发送一些按键到一个程序中,来模拟打字或按键操作。主要有这四种方法

  • 原始模式 使用 SendRaw 或者 {raw} 。如 SendRaw, ^g 发送的就是 ^g
  • 文本模式 {} 包含需要发送的内容,防止 ^+!#{} 等热键的触发,类似于 __原始模式__。
  • 普通模式 可发送按键, ^+!#{} 具有特殊含义。如发送 Alt 键可使用 Send ! 或者 Send {Alt} 。符号表见 __0x02__。
  • 盲从模式 不知道咋用(怂)。
  • 常用的 Send 普通模式下的命令参数

    {Browser_Back} 按下浏览器的”后退”按钮 {Browser_Forward} 按下浏览器的”前进”按钮 {Browser_Refresh} 按下浏览器的”刷新”按钮 {Browser_Stop} 按下浏览器的”停止”按钮 {Browser_Search} 按下浏览器的”搜索”按钮 {Browser_Favorites} 按下浏览器的”收藏”按钮 {Browser_Home} 启动浏览器并打开主页 {Volume_Mute} 主音量静音/取消静音. 通常相当于 SoundSet, +1, , mute. {Volume_Down} 减小主音量. 通常相当于 SoundSet -5. {Volume_Up} 增加主音量. 通常相当于 SoundSet +5. {Media_Next} 在媒体播放器中播放下一曲目 {Media_Prev} 在媒体播放器中播放前一曲目 {Media_Stop} 停止媒体播放器 {Media_Play_Pause} 播放/暂停媒体播放器 {Launch_Mail} 启动电子邮件程序 {Launch_Media} 启动媒体播放器 {Launch_App1} 启动用户程序 1 {Launch_App2} 启动用户程序 2 {PrintScreen} Print Screen {CtrlBreak} Ctrl+break {Pause} Pause {Click}

    0x02 热键表

    常用符号键

    #IfWin热键

    根据所处的窗口以及活动的情况,执行不同的操作。

  • #IfWinActive
  • #IfWinExist
  • #IfWinNotActive
  • #IfWinNotExist
  • 基本格式为

    Win(Windows 徽标键) Shift 表示使用钩子创建这个热键,这样避免了循环激发。如果使用 a::a 将会无穷递归! 激发热键时, 不会屏蔽(被操作系统隐藏) 热键中按键原有的功能 用于连接两个按键,合并成一个自定义热键 Space CapsLock 大小写锁定键 Enter (或 Return) Escape (或 Esc) Numpad0等 NumLock关闭下数字小键盘 NumpadIns等 NumLock打开下的数字小键盘 Backspace (或 BS) Delete(或 Del) Home键 向上翻页键 向下翻页键 向上方向键 向下方向键 向左方向键 Right 向右方向键 LButton RButton MButton 鼠标中键或滚轮 WheelDown 向下转动鼠标滚轮 WheelUp 向上转动鼠标滚轮
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #IfWinActive WinTitle, WinText
    ; WinTitle : 窗口标题或识别目标窗口的其他条件
    ; WinText : 目标窗口中单个文本元素的子字符串

    ; 比如:
    #IfWinActive, ahk_class Notepad
    ^a::MsgBox 你在记事本中按下了 Ctrl-A . 而在其他窗口中按下 Ctrl-A 将原样发送.
    #c::MsgBox 你在记事本中按下了 Win-C 组合键.

    #IfWinActive
    #c::MsgBox 你在非记事本程序中按下了 Win-C .

    #If MouseIsOver("ahk_class Shell_TrayWnd")
    ; 在任务栏上滚动滚轮:增加/减小音量.
    WheelUp::Send {Volume_Up}
    WheelDown::Send {Volume_Down}

    有时候会需要多个热键对应一种功能,这个时候可以用过个热键叠放来处理

    1
    2
    3
    4
    ^Numpad0::
    ^Numpad1::
    MsgBox Ctrl + Numpad0, Ctrl+Numpad1 can do the same thing.
    Return

    更多的热键参考: 热键(鼠标, 操纵杆和键盘快捷键)

    0x03 其他

    其实毕竟是一种新的脚本语言,学习和记忆相关的用法比较枯燥,所以边实践边学习是最简单且高效的学习过程。
    其实这一篇blog也不过是些十分零散的知识点,网络上学习AHK的教程千千万。这里强烈推荐

  • 边看故事边学AHK的 AutoHotkey快餐店
  • 收录了其他优秀博客链接的 AutoHotkey 学习指南
  • AHK实现了重复过程的简化,也能用少量的按键实现复杂的操作,下面是我想到的部分功能

  • 快速打开某些常用网站 baidu,google等
  • 快速打开常用应用
  • QQ的表情包限制太多,比如大小,尺寸……那么将表情包保存到本地,然后使用热键 + __send__ 表情包:D,斗图更方便。
  • 听说不少游戏需要同时按多个键来放大招……AHK岂不是开挂般存在。
  • 不知道如此强大的AHK,被漏洞利用了会发生什么大新闻

    如果你有啥想法,可以在评论区留言哦 (o゚v゚)ノ