Отправка событий клавиатуры в другое приложение на С#, которое не обрабатывает события Windows
вот моя ситуация: мы пишем приложение, которое должно преобразовывать координаты Microsoft Kinect в события клавиатуры и мыши.
Когда нам нужно взять под контроль мышь, все работает так, как мы планировали в любом виде приложения. Проблема возникает, когда нам нужно отправлять события клавиатуры (например, клавиша или клавиша вверх) в приложения, которые не обрабатывают события Windows, например игры.
Мы пробовали класс SendKeys.net framework, и он работает только с приложениями Windows. Когда приложение представляет собой игру Half-Life или Doom, мы не можем получить тот же эффект. Итак, вот мой вопрос: как мы можем эффективно отправлять события клавиатуры в эти другие приложения?
Ответы
Ответ 1
Вам нужно смоделировать ввод, используя SendInput. SendMessage и SendKeys работают на уровне сообщений Windows, но приложения DirectX не запускают традиционный цикл сообщений.
Есть страница на PInvoke.NET, но я должен признаться, я не пытался ее использовать.
См. также этот поток на сайте GameDev.net, где кто-то работал с некоторыми из "прорезывающих" проблем, которые могут быть встречены конкретно взаимодействуя с приложением DirectInput.
Ответ 2
К сожалению, DirectX не имеет функции встроенного подключения; однако some (эта оболочка является .Net-обложкой над другой) библиотеки, которые могут это сделать. Вам также нужно будет изучить XInput, который обесценивает DirectInput.
Ответ 3
Я думаю, что следующий пост должен быть ответом на ваш вопрос,
Как отправлять ключи с помощью глобальной клавиатуры?
В соответствии с ответом вам необходимо использовать следующие коды клавиш для функции SendInput,
http://www.gamespp.com/directx/directInputKeyboardScanCodes.html
Ответ 4
Вам нужно отправить запрос на отправку Winapi.
http://msdn.microsoft.com/en-us/library/ms644950(v=vs.85).aspx
http://pinvoke.net/default.aspx/user32.SendMessage
Это то, что я использую. Это работает, но вы должны немного прочитать об этом. Это очень мощный метод.
Ответ 5
Это быстрое и простое решение, которое я использую. Хорошо работает.
InputSimulator