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

基于AutoHotInterception实现SnapTap功能的技术求助

低延迟SnapTap(Null Movement)功能实现方案(基于AutoHotInterception)

功能需求

  • 复刻雷蛇SnapTap(类似Null Movement)功能:同时按下A/D这类相反方向键时,优先识别最后按下的键,无需松开当前按键即可立即切换移动方向;松开其中一个键时,自动恢复另一个键的输入(避免游戏判定为停止移动)。
  • 替代原有AHK v1脚本,通过更低系统层级的按键处理降低输入延迟。

前置准备

  1. 安装AutoHotInterception库(AHK v1版本),确保Interception驱动已正确安装并完成签名(Windows 10/11需禁用驱动强制签名或使用测试签名)。
  2. 运行库自带的DeviceList.ahk,找到目标键盘的设备ID(格式如Keyboard (XXXXX)),替换脚本中的对应参数。

适配后的低延迟脚本

#SingleInstance Force
#NoEnv
#MaxHotkeysPerInterval 99000000
#HotkeyInterval 99000000
#KeyHistory 0
ListLines Off
Process, Priority, , A

; 导入AutoHotInterception库
#Include <AutoHotInterception>

; 替换为你的键盘设备ID,从DeviceList.ahk获取
keyboardId := "Keyboard (12345)"  ; 示例ID,需替换为实际值

; 初始化Interception按键订阅
ahkInterception := new AutoHotInterception()
ahkInterception.SubscribeKey(keyboardId, "a", true, Func("OnA_Down"))
ahkInterception.SubscribeKey(keyboardId, "a", false, Func("OnA_Up"))
ahkInterception.SubscribeKey(keyboardId, "d", true, Func("OnD_Down"))
ahkInterception.SubscribeKey(keyboardId, "d", false, Func("OnD_Up"))

; 状态变量,与原脚本逻辑完全对齐
a_held := 0
d_held := 0
a_scrip := 0
d_scrip := 0

OnA_Down(){
    global a_held, d_held, a_scrip, d_scrip, ahkInterception, keyboardId
    a_held := 1

    if (d_scrip){
        d_scrip := 0
        ahkInterception.SendKey(keyboardId, "d", false)  ; 低层级释放D键
    }

    if (!a_scrip){
        a_scrip := 1
        ahkInterception.SendKey(keyboardId, "a", true)   ; 低层级按下A键
    }
    return 0  ; 拦截原生按键输入,避免重复触发
}

OnA_Up(){
    global a_held, d_held, a_scrip, d_scrip, ahkInterception, keyboardId
    a_held := 0

    if (a_scrip){
        a_scrip := 0
        ahkInterception.SendKey(keyboardId, "a", false)  ; 低层级释放A键
    }

    if (d_held && !d_scrip){
        d_scrip := 1
        ahkInterception.SendKey(keyboardId, "d", true)   ; 低层级按下D键
    }
    return 0  ; 拦截原生按键释放
}

OnD_Down(){
    global a_held, d_held, a_scrip, d_scrip, ahkInterception, keyboardId
    d_held := 1

    if (a_scrip){
        a_scrip := 0
        ahkInterception.SendKey(keyboardId, "a", false)  ; 低层级释放A键
    }

    if (!d_scrip){
        d_scrip := 1
        ahkInterception.SendKey(keyboardId, "d", true)   ; 低层级按下D键
    }
    return 0  ; 拦截原生按键输入
}

OnD_Up(){
    global a_held, d_held, a_scrip, d_scrip, ahkInterception, keyboardId
    d_held := 0

    if (d_scrip){
        d_scrip := 0
        ahkInterception.SendKey(keyboardId, "d", false)  ; 低层级释放D键
    }

    if (a_held && !a_scrip){
        a_scrip := 1
        ahkInterception.SendKey(keyboardId, "a", true)   ; 低层级按下A键
    }
    return 0  ; 拦截原生按键释放
}

脚本说明

  • 采用AutoHotInterception的低层级按键拦截与发送机制,替代原脚本的Send命令,大幅降低输入延迟。
  • 完全保留原脚本的状态管理逻辑,确保SnapTap功能行为与原脚本一致。
  • return 0用于拦截原生按键事件,避免系统同时处理原生按键和脚本发送的按键,防止冲突。
  • 若需扩展至W/S等其他方向键,可复制现有逻辑并替换对应按键参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 18:53:19