AutoHotkey 鼠标点击热键实战:一个键绑住五种点击操作

发布时间:2026/11/3 18:38:41
AutoHotkey 鼠标点击热键实战:一个键绑住五种点击操作

AutoHotkey 鼠标点击热键实战:一个键绑住五种点击操作

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

审批窗口里有个「确认」按钮,位置固定,每天要点四十来次。用 AutoHotkey 的鼠标点击热键,可以把这个点击绑到 F1 上,第二次起就不用再碰鼠标。下面从一段能直接跑的三行脚本开始,依次过四种点击动作、条件触发和常见坑。

30 秒跑通第一个点击热键

新建一个 .ahk 文件写入下面一行,双击运行,按 F1 后左键就会在当前鼠标位置点一下:

F1::Click

点击动作由Click命令完成,真正的第一步发生在它之前:输入钩子层(source/keyboard_mouse.cpp)先捕获 F1 的按键事件,再到 source/hotkey.cpp 里与已注册的热键匹配上,才执行这一行。

按动作拆开:四种鼠标点击操作

单击

单击的规范写法是三行,return标志热键主体结束:

F1:: Click return

Click不带参数就是左键单击,写成Click 1等价;上一节的单行形式和这三行形式行为一致。

双击与右键

把 F2 绑成双击、F3 绑成右键,就不用手动连点两下:

F2::Click 2 F3::Click right

2是点击次数,right切换到右键、middle是中键,省略按键词时默认左键。

定点坐标点击

要点的是固定位置而不是当前鼠标所在处时,给Click直接带上 X、Y 即可,例子里 F9 点击 (500, 300):

F9::Click 500, 300

坐标以屏幕左上角为原点的绝对坐标,可以用 Window Spy 或移动鼠标时的坐标提示读出准确值。

拖拽

拖拽本质是「按下、移动、抬起」三步组合,下面六行用 F5 模拟向右拖动 100 像素:

F5:: Click down Sleep 100 MouseMove 100, 0 Click up return

Click down/Click up分别按下和抬起左键,MouseMove 100, 0表示相对当前位置向右 100 像素、垂直方向 0,改成任意方向与距离即可。

让热键只在满足条件时生效

热键不必全局生效,下面两段示例展示「生效 vs 不生效」的对照写法:

#IfWinActive, 记事本 F6::Click 100, 200 #IfWinActive F7:: if A_Hour >= 8 && A_Hour < 18 Click 300, 400 return

第一段:#IfWinActive, 记事本把 F6 限定在「记事本窗口激活时」——记事本在前台生效,切到其他窗口时按 F6 会被静默忽略(窗口条件的判定逻辑在 source/hotkey.cpp 的HotCriterionAllowsFiring中)。第二段:F7 始终注册,但动作只在 8:00–18:00 执行,下班后按 F7 什么都不会发生。前者控制的是热键是否生效,后者控制的是动作是否执行,一个是按键的条件,一个是行为的条件。

参数速查:三个全局默认值

热键体系里最常问到的默认值都定义在 source/globaldata.cpp,运行时可通过对应的A_内置变量读写:

参数/变量默认值作用何时需要改
g_HotkeyModifierTimeout50 ms修饰键之后多长时间内按下的键算「组合的一部分」,超时则修饰键被当作单独按键快速连击 Ctrl+Shift+A 类组合时误判,调大或调小
g_MaxThreadsPerHotkey1单个热键可并发的动作线程上限,超出的触发会被忽略动作较慢、希望新触发排队或丢弃旧动作时
g_MaxHotkeysPerInterval70 次 / 2 秒单位时间内的触发次数上限,超过会弹「热键失控」警告框合法的高频操作触发警告时调大上限

2 秒这个统计窗口由g_HotkeyThrottleInterval(默认 2000 ms)控制,可一并调整。

排错三板斧

热键不触发——先检查按键是否被其他程序占用,或是否被#IfWinActive排除在外;运行ListHotkeys(可以绑个键,如F9::ListHotkeys)查看热键是否真的注册成功、挂在什么条件上。

递归/重复触发——先检查热键动作里是否用Send发出了同一个键;想「触发但不被自己再次捕获」时,给按键加$前缀,如$F8::Send {F8}。若弹出「2 秒内 70 次热键」的警告框,说明脚本进了死循环,先修逻辑再谈调上限。

多热键冲突——先查同一个键是否在多处定义,AutoHotkey 里后定义者覆盖先定义者,在脚本里搜出最后一次定义即可;如果要在不同窗口给同一个键绑不同动作,用#IfWinActive块按窗口隔离。

两个完整场景

场景 A:Excel 日期录入。每天早上要把当天日期填进台账固定单元格,再 Tab 跳到下一格,工作日天天重复。绑到 Ctrl+1,并且只在 Excel 窗口生效:

#IfWinActive, Excel ^1:: Send %A_YYYY%-%A_MM%-%A_DD%{Tab} return #IfWinActive

%A_YYYY%等会自动展开为当前日期;想改成带前缀录入或录入时间,只改Send里的字符串即可。

场景 B:网页表单自动提交。登录页的输入框和提交按钮位置固定,每次刷新页面后都要点一次、填一遍。下面在 Chrome 窗口内用 Ctrl+Alt+S 先点用户名框、输入账号密码,再回车提交:

#IfWinActive, ahk_exe chrome.exe ^!s:: Click 400, 300 Send username{Tab}password{Enter} return

两个坐标值用 Window Spy 获取,换台机器要重新量取;若登录靠点按钮而非回车,把Enter换成Click 500, 500即可。

延伸阅读

想继续深入,项目说明与命令总览在 README.md;热键匹配与触发的完整流程在 source/hotkey.cpp,本文提到的所有默认值都能在 source/globaldata.cpp 里核对到。从这里开始,任何重复的鼠标活儿都能绑到键上。

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

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