teclado - sendkeys c#
Enviar eventos de teclado a otra aplicaciĆ³n en C#que no maneja eventos de Windows (5)
Esta es una solución rápida y fácil que estoy usando. Funciona bien.
esta es mi situación: estamos escribiendo una aplicación que debe transformar las coordenadas de Microsoft Kinect en eventos de teclado y mouse.
Cuando necesitamos tomar el control del mouse, todo funciona según lo previsto en CUALQUIER tipo de aplicación. El problema surge cuando tenemos que enviar eventos de teclado (como pulsar la tecla o subir la tecla) a aplicaciones que no manejan eventos de Windows, como juegos, por ejemplo.
Probamos la clase SendKeys del .NET Framework, y solo funciona con aplicaciones de Windows. Cuando la aplicación es un juego como Half-Life o Doom, no podemos obtener el mismo efecto. Entonces, aquí está mi pregunta: ¿cómo podemos enviar efectivamente eventos de teclado a estas otras aplicaciones?
Necesita invocar el mensaje de envío de Winapi.
http://msdn.microsoft.com/en-us/library/ms644950(v=vs.85).aspx
http://pinvoke.net/default.aspx/user32.SendMessage
Esto es lo que estoy usando. Funciona pero tienes que leer un poco al respecto. Este es un método muy poderoso.
Necesitas simular la entrada usando SendInput . SendMessage y SendKeys tienden a funcionar al nivel de los mensajes de Windows, pero las aplicaciones DirectX no ejecutan un bucle tradicional de mensajes.
Hay una página en PInvoke.NET , pero debo confesar que no he intentado usarla.
Vea también este hilo en el sitio GameDev.net, donde alguien ha trabajado con algunos de los problemas de "dentición" que pueden encontrarse interactuando específicamente con una aplicación basada en DirectInput.
Desafortunadamente, DirectX no tiene una función de enganche incorporada; sin embargo, hay algunas bibliotecas (esta es una .Net envoltura sobre otra) que pueden hacerlo. También deberá buscar en XInput, que desaprueba DirectInput.
Creo que la siguiente publicación debería ser una respuesta a tu pregunta,
¿Cómo envío claves usando un gancho de teclado global?
Según la respuesta, debe usar los siguientes códigos de tecla para la función SendInput, http://www.gamespp.com/directx/directInputKeyboardScanCodes.html