求助:用AHK实现鼠标中键按压力度(时长)对应三种功能的问题
求助:用AHK实现鼠标中键按压力度(时长)对应三种功能的问题
嘿,我来帮你搞定这个AHK脚本的问题!你的需求很明确:鼠标中键短按保持原本的点击功能,按住满500ms时触发Ctrl+C复制,继续按住到1000ms时触发Ctrl+V粘贴。先说说你之前的代码里存在的问题,再给你一个能稳定运行的版本。
你现有代码的问题分析
- 语法错误:
MButton: :中间多了空格,正确的绑定写法应该是MButton::A _TickCount里的空格要去掉,AHK的内置变量是A_TickCount,空格会导致变量识别失败
- 逻辑错误:
- 你写的多个
if <xx判断会依次触发,比如短按时长<299ms时,会同时执行发送中键、复制、粘贴,完全不符合你的需求
- 你写的多个
- 循环操作错误:
While GetKeyState("MButton", "P")后面直接写Send {^C},会在按住中键的整个过程中不断重复发送复制命令,这显然不是我们想要的
正确的AHK脚本实现
MButton:: keyDown := A_TickCount copied := false pasted := false ; 循环检测按键状态,同时判断按住时长 while GetKeyState("MButton", "P") { duration := A_TickCount - keyDown ; 达到500ms且未触发过复制时,执行一次Ctrl+C if (duration >= 500 && !copied) { Send ^c copied := true } ; 达到1000ms且未触发过粘贴时,执行一次Ctrl+V if (duration >= 1000 && !pasted) { Send ^v pasted := true } Sleep 10 ; 降低循环CPU占用,避免卡顿 } ; 按键释放后,判断如果是短按(<500ms),执行原中键功能 duration := A_TickCount - keyDown if (duration < 500 && !copied) { Send {MButton} } Return
脚本功能说明
- 短按中键(按住时长<500ms):释放后会触发原本的鼠标中键点击功能(比如滚轮点击、打开新标签等,取决于系统/软件设置)
- 按住中键满500ms:自动触发
Ctrl+C复制,此时如果继续按住,不会重复复制 - 继续按住到1000ms:自动触发
Ctrl+V粘贴,同样不会重复触发 - 每次按键结束后,标记变量会自动重置,确保下一次按键正常工作
备注:内容来源于stack exchange,提问作者ene adelehum




