Отключите или отключите функции контроллера/геймпада для другого процесса в C#

#c# #winforms #game-development #gamepad

Вопрос:

Я пишу небольшое приложение Windows Forms, C# чтобы определить, подключен ли контроллер XBox, и если да, то оно сопоставляет кнопки геймпада с определенными клавишами клавиатуры (с помощью SharpDX и InputSimulator). После этого начинается игра, в которой я хочу использовать свою собственную конфигурацию. Все это отлично работает.

К сожалению, игра имеет встроенную поддержку контроллера и всегда уделяет приоритетное внимание собственному отображению кнопок, и проблема в том, что она поддерживает только 3 кнопки на геймпаде.

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

Я не знаю, поможет ли это, но игры, с которыми я хочу использовать свой инструмент, созданы для RPG Maker 2003 того, чтобы сделать эти игры полностью совместимыми с контроллером. Может быть, есть способ просто отключить его в самой игре, и я не знаю, как это сделать?

Комментарии:

1. Чтобы было понятно, игра не позволяет вам не настраивать контроллер? Если он подключен, он будет активен?

2. Да, если он подключен, он будет активен. Вы можете решить, хотите ли вы использовать геймпад (если он подключен) или клавиатуру. Если он не подключен, вам придется использовать клавиатуру. Вы не можете настроить ни одну из кнопок геймпада. Например, «A» на геймпаде всегда будет эквивалентно пробелу на клавиатуре, а «B» — Esc. Вот почему я хочу, чтобы мой инструмент обрабатывал отображение кнопок. Но для того, чтобы это сработало, игровое приложение должно «игнорировать» наличие доступного геймпада.

3. Тогда вы фактически спрашиваете, есть ли способ для стороннего приложения полностью заблокировать доступ к устройству для любого другого приложения. Мне трудно ожидать, что это возможно, просто потому, что это неизбежно приведет к серьезным недостаткам вредоносных программ, которые просто захватывают все устройства ввода и делают любую машину функционально неработоспособной.

4. Это то, чего я боялся, но я подумал, что мог бы, по крайней мере, спросить, возможно ли это. Это очень плохо. У вас есть какие-либо другие идеи о том, как подойти к этой проблеме, или это никогда не сработает?

5. В качестве альтернативы, приобретите промежуточное устройство, например, Raspberry Pi. Пусть он действует как эмулятор контроллера и подключает ваш контроллер к Pi, а не к компьютеру, на котором запущена игра. Попросите Pi подключиться к компьютеру и действовать в качестве устройства ввода.