Современный способ чтения ввода геймпада в C # - PullRequest
0 голосов
/ 05 апреля 2019

Вопрос: Я хочу прочитать ввод с геймпада / джойстика под c # и хочу узнать, какая клавиша нажата. (по крайней мере, несколько моделей геймпадов)

Google и stackoverflow полны различных устаревших решений, большинство из них заданы в 2011 году. Некоторые из популярных библиотек, такие как SharpDX или SlimDX уже заброшены и не поддерживаются.

В итоге я использую SharpLibHid , который путается с необработанным вводом. И у меня даже был некоторый успех. Я разрабатываю приложение WPF, но эта библиотека требует WndProc из winforms, с помощью этого трюка 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 patterd совершенно другой.

Я видел много программ keymapper для геймпадов - они могут понять практически любое устройство. Так что есть какой-то способ сделать все правильно.

Может быть, можно предложить хотя бы некоторую документацию о том, как работать с геймпадами или как интерпретировать необработанные данные ( с примерами из реального мира )?

...