如何在 Windows 10 中自定义游戏手柄控制器操纵杆输出灵敏度

Posted

技术标签:

【中文标题】如何在 Windows 10 中自定义游戏手柄控制器操纵杆输出灵敏度【英文标题】:How to customize gamepad controller joystick output sensitivity in Windows 10 【发布时间】:2021-05-07 21:46:07 【问题描述】:

我一直在广泛寻找一种方法来改变 Windows 中我的游戏手柄的灵敏度。 在大多数游戏中,操纵杆的灵敏度太高,所以除非我非常小心轻柔地按下操纵杆,否则它总是会发送最大输出,因此我的角色将始终全速移动。

我尝试使用 AutoHotKey 动态更改输出,但事实证明您需要一个特殊的驱动程序来更改输出。

然后我尝试使用 Windows Gamepad Calibration 菜单进行思考,但 25 y/o 控制面板没有提供任何调整灵敏度的选项。

接下来我想到的是进入校准文件并手动更改值以降低灵敏度,但我只能找到this reference document,在其中我试图查看是否可以访问和更改与校准,但我什至在我的注册表中找不到“GameInput”文件夹。

将从注册表中的此位置读取具有供应商 ID (VID) VVVV、产品 ID (PID) PPPP、使用页面 UUUU 和使用 ID XXXX 的设备的映射:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\VVVVPPPPUUUUXXXX

你们有没有找到解决这个问题的方法?我很惊讶我的搜索结果如此之少。

如果有必要,我愿意做一些 AHK/Python/Powershell 编码来解决这个问题。

提前致谢!

【问题讨论】:

相关问题:***.com/questions/51404353/…和superuser.com/questions/1486752/… 【参考方案1】:

简答

考虑使用仿真软件(x360、DS4Windows 等),它可以使您的输入命令通过易于配置的软件层。此类软件往往允许调整灵敏度、死区和其他选项。请参见下面 x360ce(​​右)和 DS4Windows(左)的屏幕截图。

x360ce:https://www.x360ce.com/ DS4Windows:https://github.com/Ryochan7/DS4Windows/releases

长答案

根据游戏的编码方式,它可以通过多种方式读取操纵杆输入。虽然操纵杆处理大多是标准化的,但流行的标准包括 XInput、DInput(旧版)、Steam Input(如果使用 Steam)或直接作为 USB 设备(不确定这有多普遍,但我见过)。

Windows 内置的 joy.cpl 校准工具会影响使用 XInput/DInput 技术的控制器,并且某些游戏会忽略这些设置。它的校准功能也相当有限,所以我会推荐上面简短回答中提到的工具,但可以手动调整这些设置。

在继续之前,我建议阅读我对类似问题的回答,其中包含有关这些特定注册表项的详细信息:https://superuser.com/a/1699020/322062

不过,在较高级别上,要手动校准 Windows joy.cpl,请执行以下操作:

    导航到相应控制器的注册表项, HKEY_CURRENT_USER\System\CurrentControlSet\Control\MediaProperties\PrivateProperties\DirectInput\VID_<VendorID>&PID_<ProductID>\Calibration\0\Type\Axes\<NUM>。如果您无法识别哪个键对应于您的控制器,我会推荐 Nirsoft 的一款名为“USBDeview”的工具。

    修改映射为 12 字节二进制值的 Calibration 键(编码为 <MIN> <MID> <MAX>)。例如,假设我们希望 y 轴 Calibration 为有缺陷的模拟摇杆的 30-70,中心为 45 摇杆。那么我们Calibration映射的12个字节应该设置为<1E 00 00 00> <2D 00 00 00> <46 00 00 00>

奖金

对于那些好奇的人,您可以通过将调试器挂接到游戏并检查加载的 DLL 并设置断点来了解游戏如何读取控制器输入。

我在玩 Star Wars Jedi: Fallen Order 时遇到了控制器问题,发现游戏加载了 XInput.dll、DInput.dll、HID.dll 文件。有趣的是,当使用 PS4 游戏杆时会调用 HID.dll,因此会忽略 Windows joy.cpl 校准设置。使用 DS4Windows 会导致调用 XInput.dll 函数,同时也修复了校准问题。

【讨论】:

以上是关于如何在 Windows 10 中自定义游戏手柄控制器操纵杆输出灵敏度的主要内容,如果未能解决你的问题,请参考以下文章

使用原始输入在 Windows 上的游戏手柄力反馈(振动)

如何在 Windows 中禁用游戏手柄/操纵杆上的按钮/轴?

QGamePadManager connectedDevices 为空,但 Windows 检测到游戏手柄

将游戏手柄数据传递到 Windows

XBOX360无线手柄/有线手柄如何连接PC玩游戏?

浏览器 API 游戏手柄未在 Windows 中检测到