在C#中读取游戏手柄输入的现代方法

时间:2019-04-05 18:49:39

标签: c# wpf gamepad-api

问题:我想阅读c#下的游戏手柄/游戏杆输入,并希望能够知道按下了哪个键。 (至少几种游戏手柄模型)

Google和stackoverflow充满了不同的过时解决方案,其中大多数都在2011年问世。一些受欢迎的库,例如 SharpDX SlimDX 已被放弃并且不受支持。

我最终使用的是 SharpLibHid ,它会弄乱一些原始输入。我什至取得了一些成功。我正在开发WPF应用程序,但是该库需要winforms中的WndProc,并借助https://stackoverflow.com/a/42008211/3348804这个技巧,一切正常。代码很长,您可以在这里获得出色的示例软件:https://github.com/Slion/SharpLibHid

重点是我能够从SharpLib.Hid.Event提取此信息:

InputReport: 0000000F808080800000000000000000000000000202010200020002
DeviceInfo: ShanWan, USB WirelessGamepad 
[#Header# dwSize: 52, dwType: RIM_TYPEHID, hDevice: 65610, wParam: 1]
[#Hid# dwCount: 1, dwSizeHid: 28]
[#Keyboard# Message: 251658240, ExtraInformation: 2155905152, Flags: RI_KEY_MAKE, MakeCode: 28, VKey: 0, Reserved: 1]
[#Mouse# usButtonData: 0, usButtonFlags: RI_MOUSE_LEFT_BUTTON_DOWN, lLastX: -2139062144, lLastY: 0, ulButtons: 1, ulExtraInformation: 0, usFlags: 28, ulRawButtons: 251658240]
[KeyId: 1835008, UsageCollection: 5]
UsageValues: [015][128][128][128][128][000][000][000][000][000][000][000][000][000][000][000][000][512][512][513][514]
UsageCollectionNameAndValue: GamePad (0x0005)

通过经验方法,我可以观察到一些模式,并使用其中一些数据来与游戏手柄一起使用。这根本不是正确的方法。而对于另一个游戏手柄,InputReport的模式则完全不同。

我看到了很多用于游戏手柄的键盘映射程序-他们几乎可以理解任何设备。因此,有一些方法可以正确处理事情。

也许有人可以建议至少一些有关如何使用游戏手柄或如何解释原始数据的文档(以真实示例为例)?

0 个答案:

没有答案