Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sending keyboard events to another application in C# that does not handle Windows events

here is my situation: we are writing an application that must transform Microsoft Kinect coordinates into keyboard and mouse events.

When we need to take control of the mouse, everything works as we intended in ANY kind of application. The problem arises when we need to send keyboard events (like key down or key up) to applications that doesn't handle Windows events, like games, for example.

We tried the SendKeys class of the .net framework, and it only works with Windows applications. When the application is a game like Half-Life or Doom we can't get the same effect. So, here is my question: how can we effectively send keyboard events to these other applications?

like image 987
Kico Lobo Avatar asked Aug 21 '11 02:08

Kico Lobo


2 Answers

You need to simulate input using SendInput. SendMessage and SendKeys tend to work at the level of windows messages - but DirectX apps don't run a traditional message loop.

There is a page on PInvoke.NET, but I have to confess, I've not tried to use it.


See also this thread on the GameDev.net site, where someone has worked with some of the "teething" issues that can be encountered specifically interacting with a DirectInput based application.

like image 83
Damien_The_Unbeliever Avatar answered Oct 01 '22 11:10

Damien_The_Unbeliever


Unfortunately DirectX has no built-in hooking functionality; however there are some (this one is a .Net wrapper over another one) libraries out there that can do it. You will also need to look into XInput, which deprecates DirectInput.

like image 43
Jonathan Dickinson Avatar answered Oct 01 '22 10:10

Jonathan Dickinson