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 returnClick不带参数就是左键单击,写成Click 1等价;上一节的单行形式和这三行形式行为一致。
双击与右键
把 F2 绑成双击、F3 绑成右键,就不用手动连点两下:
F2::Click 2 F3::Click right2是点击次数,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 returnClick 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_HotkeyModifierTimeout | 50 ms | 修饰键之后多长时间内按下的键算「组合的一部分」,超时则修饰键被当作单独按键 | 快速连击 Ctrl+Shift+A 类组合时误判,调大或调小 |
g_MaxThreadsPerHotkey | 1 | 单个热键可并发的动作线程上限,超出的触发会被忽略 | 动作较慢、希望新触发排队或丢弃旧动作时 |
g_MaxHotkeysPerInterval | 70 次 / 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),仅供参考