You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用AutoHotkey实现鼠标轴触发快捷键的压力感应功能?

实现思路与代码示例

核心机制说明

解决问题的关键是累计鼠标的移动偏移量,而非单次对比相邻帧的位置:

  • 按住Space键时,记录初始鼠标位置,同时初始化X/Y轴的累计偏移量为0
  • 在循环中持续获取当前鼠标位置,计算与上一基准点的偏移
  • 将偏移累加到累计值中,当累计值达到±10像素时,触发对应方向的快捷键,并更新基准位置(抵消已触发的10像素偏移,避免重复计数)
  • 循环执行直到Space键松开

完整示例代码

#SingleInstance Force
#Persistent
#NoEnv
#Warn All, OutputDebug
#MaxHotkeysPerInterval 500
SetBatchLines -1
CoordMode Mouse, Screen ; 统一使用屏幕坐标系

~Space::
    MouseGetPos baseX, baseY ; 记录初始基准位置
    accumX := 0
    accumY := 0
    ToolTip "按住Space拖拽鼠标,每移动10像素触发对应方向按键`n按Esc退出" ; 提示信息
    while GetKeyState("Space", "P") {
        MouseGetPos currX, currY
        ; 计算当前位置与基准点的偏移
        deltaX := currX - baseX
        deltaY := currY - baseY

        ; 累计偏移量
        accumX += deltaX
        accumY += deltaY

        ; 处理X轴:累计达到±10像素时触发按键
        if (accumX >= 10) {
            SendInput "{Right}"
            baseX += 10 ; 更新基准点,抵消已触发的10像素
            accumX -= 10 ; 重置剩余累计值(避免多算)
        } else if (accumX <= -10) {
            SendInput "{Left}"
            baseX -= 10
            accumX += 10
        }

        ; 处理Y轴:累计达到±10像素时触发按键
        if (accumY >= 10) {
            SendInput "{Down}" ; 屏幕坐标系Y值向下增大,Y+对应向下
            baseY += 10
            accumY -= 10
        } else if (accumY <= -10) {
            SendInput "{Up}" ; Y-对应向上
            baseY -= 10
            accumY += 10
        }

        Sleep 10 ; 降低循环频率,减少资源占用
    }
    ToolTip ; 关闭提示
Return

Esc::ExitApp

关键细节解释

  • 累计偏移量:通过accumX和accumY累计鼠标移动的总偏移,避免单次1像素的误判,只有当累计达到10像素时才触发操作
  • 基准位置更新:每次触发按键后,更新baseX/baseY,确保后续的偏移计算基于当前已触发后的位置,实现连续的分段触发
  • 坐标系适配:屏幕坐标系中Y轴向下为正,所以Y值增大对应鼠标向下移动,触发{Down};Y值减小对应向上移动,触发{Up}
  • 性能优化:Sleep 10控制循环间隔,既保证响应速度,又不会过度占用CPU

内容的提问来源于stack exchange,提问作者Ralf_Reddings

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 19:07:01