Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检测使用USB HID API推送的gamepad触发器?_Usb_Hid_Xbox_Gamepad_Xinput - Fatal编程技术网

如何检测使用USB HID API推送的gamepad触发器?

如何检测使用USB HID API推送的gamepad触发器?,usb,hid,xbox,gamepad,xinput,Usb,Hid,Xbox,Gamepad,Xinput,当按下gamepad按钮时,我使用RawInput+Windows USB HID API接收WM_输入消息并检索gamepad状态 有一个问题:两个触发器在同一个轴上工作,这意味着您无法确定是否同时按下了两个触发器。我在启动OS Windows gamepad测试应用程序时观察到了相同的行为。但我需要区分这两个按钮 请注意,XInput可以按需要工作,它为两个触发器提供了两个轴,但我不想使用XInput,因为它只适用于XBox控制器,而且世界上有几十个非XBox控制器 我想一定有办法通过USB

当按下gamepad按钮时,我使用RawInput+Windows USB HID API接收WM_输入消息并检索gamepad状态

有一个问题:两个触发器在同一个轴上工作,这意味着您无法确定是否同时按下了两个触发器。我在启动OS Windows gamepad测试应用程序时观察到了相同的行为。但我需要区分这两个按钮

请注意,XInput可以按需要工作,它为两个触发器提供了两个轴,但我不想使用XInput,因为它只适用于XBox控制器,而且世界上有几十个非XBox控制器

我想一定有办法通过USB HID API读取两个轴,但直到现在我都找不到。你解决问题了吗

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

操作系统:Windows7

IDE:VisualStudio2010


语言:C++

如果您确实需要通过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
使其在Rx/Ry(0x33/0x34使用)上报告LT/RT,在Z/Rz(0x32/0x35使用)HID轴上报告RStick-就像DualShock4一样:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\xusb22\Parameters]
"GamepadTriggerUsage"=dword:00003334
"GamepadStickUsage"=dword:31303532
但是,仍然没有任何方法通过HID接口将振动发送到XInput控制器

PS:还有其他的选择。请参阅
C:\Windows\INF\xusb22.INF
文件


你说XInput只适用于XBox控制器。但这是不正确的。XInput可与任何符合XInput的控制器一起工作。销售的许多Xinput兼容控制器不是XBox控制器。双冲击可以与适当的驱动程序一起工作,或者您可以支持DirectX输入..好的,但仍然存在不兼容的控制器