AutoHotkey 鼠标宏实战:快速写出第一个点击连招脚本

发布时间:2026/11/3 10:21:58
AutoHotkey 鼠标宏实战:快速写出第一个点击连招脚本

AutoHotkey 鼠标宏实战:快速写出第一个点击连招脚本

【免费下载链接】AutoHotkeyAutoHotkey - macro-creation and automation-oriented scripting utility for Windows.项目地址: https://gitcode.com/gh_mirrors/au/AutoHotkey

AutoHotkey 是一款面向 Windows 的免费开源脚本工具,它的鼠标宏能力可以按指定屏幕坐标模拟鼠标点击、移动和拖拽,把批量处理、固定顺序操作这类重复动作变成一键触发。

一组固定点击,一天重复几十次

这一节说明鼠标宏解决哪类问题。前提很明确:目标窗口布局固定、操作点位置不随时间变化。比如每次导出文件都要点右上角按钮、确认对话框、再点保存;或者游戏里技能槽固定在屏幕同一位置,需要在几百毫秒内按固定顺序点完。手动点击既容易漏也容易累。AutoHotkey 的做法是把这套序列写成脚本、绑定到一个功能键上,需要执行时按一次即可。

三个鼠标原语:点、移、拖

这一节快速过一遍可用的基础动作。AutoHotkey 把它们暴露为内置命令,函数声明见 source/keyboard_mouse.h:

  • MouseClick:在指定坐标点击,可指定按键、点击次数;
  • MouseMove:把指针移到指定坐标;
  • MouseClickDrag:在起点按下、移动到终点、再抬起,完成一次拖拽;
  • 辅助命令两个:MouseGetPos读取当前指针坐标,PixelGetColor读取某坐标的像素颜色,可用于判断按钮状态是否变化。

多数宏需求用这三个原语就能覆盖,后文都是它们的组合。

原理拆解:脚本的点击如何到达窗口

这一节回答一个影响可靠性的问题:脚本"点"下去,不是真的在动鼠标。解释器把命令参数翻译成鼠标事件,通过 Windows 系统接口(SendInput 或 mouse_event)注入系统输入队列。调用链是:脚本命令先进入PerformMouse()做参数校验和分发(哪个键、要不要先移动、按下还是抬起),再落到底层的MouseClick()、MouseMove()发出事件,实现在 source/keyboard_mouse.cpp。

有三个细节值得知道:

  1. 坐标会被换算。Windows 的绝对鼠标坐标系是 0 到 65535,AutoHotkey 自动把屏幕坐标缩放映射过去。多显示器环境下绝对坐标以主显示器为基准,经常点到副屏时可能要换发送方式。
  2. 按下和抬起是两个独立事件。一次"点击"等于"按下 + 抬起",源码在两者之间刻意插入了鼠标延迟(SetMouseDelay可调),这就是"点得太快没生效"的根源。
  3. 左右键语义跟随系统设置。若在鼠标设置里启用了"交换主要与次要按键",脚本里的 Left 会被自动换算成物理右键,不会点错。

知道这三点,多数"点不中"的问题就能定位。

分步实操:坐标获取与点击序列

如何拿到技能图标坐标

先取目标点坐标,不要靠肉眼估。一个常用办法是做一个跟随指针的浮动提示:

#Persistent ; 浮动提示跟随指针,每 150ms 刷新一次,按 Esc 退出 SetTimer, CoordTip, 150 return CoordTip: MouseGetPos, px, py ToolTip, (%px%, %py%) return Esc::ExitApp

运行后把指针悬停到要点的按钮或技能槽上,记下显示的数字即可。

如何拼装点击序列

拿到坐标后,把序列绑定到功能键。用Sleep控制动作间隔,间隔要略大于目标程序的实际反应时间,宁长勿短:

; 按 F2:依次点三个技能槽,最后一个位置双击右键 F2:: MouseClick, Left, 812, 904, 1 Sleep, 180 MouseClick, Left, 864, 904, 1 Sleep, 220 MouseClick, Right, 700, 512, 2 return

如何区分按下与抬起

"按住不放再松开"这类操作(拉出范围条、长按确认),用 D/U 参数把一次点击拆成两半:

; 左键在当前指针位置按住 600ms 再松开 MouseClick, Left, , , 1, 0, D Sleep, 600 MouseClick, Left, , , 1, 0, U

D(down)和 U(up)省略坐标时,动作发生在指针当前位置,不会移动指针。

高频坑位与规避办法

这一节收集写鼠标宏时最常踩的四个坑:

  • 多屏下点偏。绝对坐标换算以主显示器为基准,副屏目标点容易偏。可把发送方式切到SendPlay(日志回放模式),或改用SetCursorPos直接定位。
  • 游戏对点击无反应。部分游戏通过 DirectInput/Raw Input 直接读输入,不走系统事件队列,脚本注入的事件对它不可见。遇到这种情况先确认目标程序是否原始输入,是的话宏方案就不成立。
  • 动作过快导致窗口不认。加大Sleep间隔,或用SetMouseDelay提高按下与抬起之间的内部延迟,不要追求极限速度。
  • 把连点写成长按。MouseClick的第 4 个参数是点击次数(1 单击、2 双击);"按住"必须拆成 D/U 两条命令,混用会导致行为不符预期。

还能用在哪里,以及接下来的清单

🖱️ 鼠标宏不限于游戏,任何"固定位置 + 固定顺序"的场景都适用:批量导出流程、表单固定位置勾选、配合PixelGetColor做条件判断后再点击(读色实现见 source/lib/pixel.cpp)。

接下来可以按顺序尝试:

  1. 用MouseClickDrag加MouseMove完成"框选区域再点击"这类组合操作;
  2. 在连招脚本里加入PixelGetColor,实现"满足颜色条件才点击";
  3. 把不同序列封装成函数,绑定到不同功能键复用;
  4. 顺着 source/keyboard_mouse.cpp 读一遍按下/抬起事件如何被逐条组装和发送。

最后提醒:在游戏环境中使用鼠标宏,需遵守该游戏的用户协议与平台规则,竞技和赛事场景不建议使用自动化操作;办公场景中注意别把坐标指到"删除""付款"这类危险按钮上。

【免费下载链接】AutoHotkeyAutoHotkey - macro-creation and automation-oriented scripting utility for Windows.项目地址: https://gitcode.com/gh_mirrors/au/AutoHotkey

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考