2011-08-21 22 views
12

esta es mi situación: estamos escribiendo una aplicación que debe transformar las coordenadas de Microsoft Kinect en eventos de teclado y mouse.Envío de eventos de teclado a otra aplicación en C# que no maneja eventos de Windows

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?

+1

¿Quiere decir DirectInput ? – SLaks

+0

No sé, soy un novato de C# :) –

+0

Sí DirectInput sería la razón por la que las aplicaciones no son 'normales'. –

Respuesta

3

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 tengo que confesar que no he intentado usarla.


Ver también this thread en el sitio GameDev.net, en la que alguien ha trabajado con algunos de los "mordedores" problemas que se pueden encontrar específicamente interactuar con una aplicación basada en DirectInput.

+1

Ya lo intenté, no funcionó. :( Es por eso que abrí una recompensa en esta pregunta. –

+0

@Kico - de acuerdo con el hilo de Gamedev.net al que se vinculó, debe enviar códigos de escaneo en lugar de las claves virtuales. ¿Lo ha intentado? –

0

Necesita invocar Winapi sendmessage.

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.

+0

SendMessage no es una buena solución, ya sea :( bastante bueno en eso también y no funcionó como yo quería. Como InputSimulator, que no envió a la entrada a las aplicaciones de juegos tampoco. :( –

0

Esta es una solución rápida y fácil que estoy usando. Funciona bien.

InputSimulator

+0

alrady intentó que :( funciona bien para aplicaciones de Windows "tradicionales", pero al enviar entradas a aplicaciones como "Half-Life" o "Doom", simplemente no funciona. –

2

Desafortunadamente, DirectX no tiene función de enganche incorporada; sin embargo, hay aresome (esta es una envoltura .Net sobre otra) libraries que puede hacerlo. También deberá buscar en XInput, que desaprueba DirectInput.

+0

¿Debo cambiarlo? código de la aplicación de destino? –

+1

No, la idea de esta forma de enganche es que usted inyecta su propio código en la aplicación antes de que tenga la oportunidad de crear el objeto AT RUNTIME. Este nuevo código hará que se cree su propio objeto. Es por eso que tiene que estar en C/++ (pero hay un contenedor .Net allí). También recuerde que este tipo de enganche hará que los monitores de trucos (p. Ej., Punk Buster) se vuelvan absolutamente delirantes. –

Cuestiones relacionadas