teclado tecla son simular programa presionar presionada para los juegos evento detectar cuales crear comandos comando botones c# api keyboard sendkeys

son - simular presionar tecla c#



EnvĂ­o de comandos de macros de teclado al juego Windows (5)

¿Estás recuperando el control de la ventana todo el tiempo, o lo estás recordando?

Si usa la API FindWindow (), simplemente puede almacenar el identificador y usar la API SendMessage para enviar eventos de clave / mouse de forma manual.

Quiero hacer un macroprograma para un juego. Pero hay un problema con el envío de claves solo a la aplicación del juego (ventana del juego). Estoy usando la API keybd_event para enviar claves a la ventana del juego. Pero solo quiero enviar claves a la ventana del juego, no al explorador ni a ninguna ventana abierta mientras se ejecuta mi macroprograma. Cuando cambié Windows todavía está enviando claves. Intenté utilizar Interaction.App con la referencia de Visual Basic.dll . Pero Interaction.App only Enfoca la ventana del juego.

No pude encontrar nada sobre mi problema. ¿Alguien puede ayudarme? Gracias



Si quieres comunicarte con un juego, normalmente tendrás que lidiar con DirectInput, no con las API de teclado normales.


arreglé mi problema en este campo ;

PostMessage (hWnd, WM_KEYDOWN, clave, {tiene que dar lParam de la clave} );

de lo contrario, no funciona. Y podemos controlar ChildWindow Class con la herramienta Spy ++ de Microsoft.

Gracias a todos por ayudar.


class SendKeySample { private static Int32 WM_KEYDOWN = 0x100; private static Int32 WM_KEYUP = 0x101; [return: MarshalAs(UnmanagedType.Bool)] [DllImport("user32.dll", SetLastError = true)] static extern bool PostMessage(IntPtr hWnd, int Msg, System.Windows.Forms.Keys wParam, int lParam); [DllImport("user32.dll", SetLastError = true)] private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow); public static IntPtr FindWindow(string windowName) { foreach (System.Diagnostics.Process p in System.Diagnostics.Process.GetProcesses()) { if (p.MainWindowHandle != IntPtr.Zero && p.MainWindowTitle.ToLower() == windowName.ToLower()) return p.MainWindowHandle; } return IntPtr.Zero; } public static IntPtr FindWindow(IntPtr parent, string childClassName) { return FindWindowEx(parent, IntPtr.Zero, childClassName, string.Empty); } public static void SendKey(IntPtr hWnd, System.Windows.Forms.Keys key) { PostMessage(hWnd, WM_KEYDOWN, key, 0); } }

Código de llamada

var hWnd = SendKeySample.FindWindow("Untitled - Notepad"); var editBox = SendKeySample.FindWindow(hWnd, "edit"); SendKeySample.SendKey(editBox, Keys.A);