You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

求助:用AHK实现鼠标中键按压力度(时长)对应三种功能的问题

求助:用AHK实现鼠标中键按压力度(时长)对应三种功能的问题

嘿,我来帮你搞定这个AHK脚本的问题!你的需求很明确:鼠标中键短按保持原本的点击功能,按住满500ms时触发Ctrl+C复制,继续按住到1000ms时触发Ctrl+V粘贴。先说说你之前的代码里存在的问题,再给你一个能稳定运行的版本。

你现有代码的问题分析

  1. 语法错误
    • MButton: :中间多了空格,正确的绑定写法应该是MButton::
    • A _TickCount里的空格要去掉,AHK的内置变量是A_TickCount,空格会导致变量识别失败
  2. 逻辑错误
    • 你写的多个if <xx判断会依次触发,比如短按时长<299ms时,会同时执行发送中键、复制、粘贴,完全不符合你的需求
  3. 循环操作错误
    • 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

火山引擎 最新活动