如何使用USB HID API检测游戏手柄触发器?

Jus*_*ter 6 usb xbox hid xinput gamepad

当按下游戏手柄按钮并检索游戏手柄状态时,我使用RawInput + Windows USB HID API接收WM_INPUT消息.

有一个问题:两个触发器在同一轴上工作,这意味着你无法弄清楚是否同时按下了两个触发器.我在启动OS Windows游戏手柄测试应用程序时观察到相同的行为.但我需要区分这两个推按钮.

请注意,XInput可以根据需要工作,它为两个触发器提供了两个轴,但我不想使用XInput,因为它仅适用于XBox控制器,并且世界上有许多非xbox控制器.

我想必须有办法通过USB HID API读取两个轴,但直到现在我找不到它.你解决了这个问题吗?

游戏手柄:使用XBox 360(但应支持任何其他).

操作系统:Windows 7.

IDE:Visual Studio 2010.

语言:C++

DJm*_*00n 1

如果您确实需要通过 HID API 读取 XInput 数据并独立获取触发轴...

有一个xusb22.sys驱动程序选项:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\xusb22\Parameters]
"GamepadTriggerUsage"=dword:00003532
"GamepadStickUsage"=dword:31303433
Run Code Online (Sandbox Code Playgroud)

让它报告 Rx/Ry 上的 LT/RT(0x33/0x34 使用)和 Z/Rz 上的 RStick(0x32/0x35 使用)HID 轴 - 就像 DualShock4 一样:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\xusb22\Parameters]
"GamepadTriggerUsage"=dword:00003334
"GamepadStickUsage"=dword:31303532
Run Code Online (Sandbox Code Playgroud)

但仍然没有任何方法可以通过其 HID 接口将振动发送到 XInput 控制器。

PS:还有其他选项。参见C:\Windows\INF\xusb22.inf文件。

XInput HID 触发器