链路第一环:物理输入与系统识别
手柄按键和摇杆是物理器件:按键是开关,摇杆是电位器(输出连续的模拟值)。这些信号先到手柄内的主控芯片,再通过 USB 或蓝牙报给 Windows;系统侧由驱动接手,把手柄注册为一个标准输入设备。DirectInput / XInput 是 Windows 提供给应用程序读手柄的两套接口——XInput 是 Xbox 系手柄的标准通道,DirectInput 覆盖更老更杂的设备。
这一环的断点表现:设备管理器或 joy.cpl 里看不到手柄、按键测试无响应。问题在硬件、驱动、连接层,任何映射软件都帮不上——这就是官方「只要 Windows 识别,JoyToKey 就能支持」这句话的另一半含义。
第二环:JoyToKey 读取与翻译
JoyToKey 作为用户态程序,通过系统的手柄接口持续读取设备状态:哪个键按下、摇杆偏到哪、偏移多大。同时它在内存里维护着你的配置表(就是那些 .cfg 文件的内容):Button 1 → 字母 A,左摇杆横轴 → 鼠标横向移动,速度几档、死区多少。
每读到一个输入,就查一次表:输入落在死区外吗?摇杆偏移量换算成多快的指针速度?这个键按下要输出哪个键码?我们平时调的灵敏度、死区、阈值、输入间隔,全部是这张「翻译表」的参数。
第三环:虚拟输入的注入
翻译出的结果,通过系统提供的输入注入接口,作为标准的键盘/鼠标事件放进系统输入队列。对下游而言,这些事件与物理键盘敲出来的事件没有区别——所以记事本、浏览器、游戏都照单全收。
第四环:目标程序接收(与权限墙)
输入事件最终要送进目标程序的窗口。这里横着一道系统安全机制 UIPI:低权限进程的输入不允许进入高权限进程的窗口。JoyToKey 普通运行、游戏管理员运行时,输入在这最后一环被拦——链路其他部分全正常(所以记事本里测试是好的)。这是「进游戏没反应」的第一大原因,解法见权限问题详解。
用链路视角排查问题
| 断点 | 典型症状 | 对应文章 |
|---|---|---|
| 第一环(识别) | 系统里看不到手柄 | 排查清单 1-5 步 |
| 第二环(翻译) | 面板亮但没分配键 / 配置不对 | 配置文件详解 |
| 第三环(注入参数) | 键码不兼容 / 节奏不对 | 仿真模式调校 |
| 第四环(接收) | 记事本正常、游戏无效 | 权限隔离详解 |
把这条链路装进脑子,以后遇到问题先问「断在第几环」,排查就从「漫无目的试」变成「顺藤摸瓜查」。
