Отправка событий клавиатуры в другое приложение в C #, которое не обрабатывает события Windows - PullRequest
12 голосов
/ 21 августа 2011

здесь моя ситуация: мы пишем приложение, которое должно преобразовывать координаты Microsoft Kinect в события клавиатуры и мыши.

Когда нам нужно взять под контроль мышь, все работает так, как мы планировали, в ЛЮБОМ видеприложение.Проблема возникает, когда нам нужно отправить события клавиатуры (например, нажатие клавиши или вверх) в приложения, которые не обрабатывают события Windows, например игры, например.

Мы попробовали класс SendKeys .net framework., и это работает только с приложениями Windows.Когда приложение представляет собой игру типа Half-Life или Doom, мы не можем получить тот же эффект.Итак, вот мой вопрос: как мы можем эффективно отправлять события клавиатуры в эти другие приложения?

Ответы [ 5 ]

3 голосов
/ 23 августа 2011

Вам необходимо смоделировать ввод, используя SendInput .SendMessage и SendKeys, как правило, работают на уровне сообщений Windows, но приложения DirectX не запускают традиционный цикл обработки сообщений.

Есть страница на PInvoke.NET , но я долженПризнайтесь, я не пытался его использовать.


См. также эту ветку на сайте GameDev.net, где кто-то работал с некоторыми проблемами "прорезывания зубов", которыеможно встретить специально взаимодействуя с приложением на основе DirectInput.

2 голосов
/ 23 августа 2011

К сожалению, DirectX не имеет встроенной функции перехвата;однако есть некоторые (этот является .Net-оболочкой над другим) библиотеки , которые могут это сделатьВам также необходимо изучить XInput, который не поддерживает DirectInput.

1 голос
/ 28 августа 2011

Я думаю, что следующий пост должен быть ответом на ваш вопрос,

Как отправить ключи с помощью глобальной клавиатуры?

Согласно ответу, вы должны использовать следующие коды клавиш для функции SendInput, http://www.gamespp.com/directx/directInputKeyboardScanCodes.html

0 голосов
/ 23 августа 2011

Это быстрое и простое решение, которое я использую.Хорошо работает.

InputSimulator

0 голосов
/ 23 августа 2011

Вам нужно pInvoke Winapi sendmessage.

http://msdn.microsoft.com/en-us/library/ms644950(v=vs.85).aspx

http://pinvoke.net/default.aspx/user32.SendMessage

Это то, что я использую.Это работает, но вы должны прочитать об этом немного.Это очень мощный метод.

...