Como hacer que C# pulse una tecla por ti?

Iniciado por andrecid, 29 Julio 2015, 16:52 PM

0 Miembros y 1 Visitante están viendo este tema.

andrecid

Hola bueno pues como ya pudieron ver en el titulo.

if(GetAsyncKeyState(Keys.F2) == -32767)
           {
               //Aquí el código para pulsar la tecla
             
           }


Muy bien con eso hago que c# pueda ver que tecla se pulso, pero yo quiero que c# pulse una tecla por mi

¿Cómo puedo hacerlo?

andrecid

#1
Muy Bien ya encontré la respuesta la dejo por si alguien la busca.



SendKeys.Send("{A}");

Ok Modifico ese código lo que hace es enviar escrito pero no se envían las pulsaciones.Yo quiero que se envíen pulsaciones .

Eleкtro

#2
Cita de: andrecid en 29 Julio 2015, 16:56 PMYo quiero que se envíen pulsaciones.

¿A la misma aplicación .Net, a la ventana que esté activa, o a cualquier ventana (activa o inactiva indiferentemente)?.

Hay una gran diferencia y cada una requiere una elaboración distinta.



  • Para enviar pulsaciones a la aplicación donde corre tu código obviamente solo tienes que activar la ventana de la app y pulsar las teclas, luego puedes procesar "X" acción según la tecla pulsada suscribiéndote al evento Form.KeyDown o Form.KeyPress.

  • Para enviar pulsaciones a la aplicación que esté activa, es decir, la que tenga el foco, primero debes hallar su HWND (el handle de la ventana), por último puedes usar las funciones de la API de Windows.

    SendInput function - MSDN
       ( No utilices la función keybd_event, que aunque sea más sencillo, está obsoleta. )

  • Para enviar pulsaciones a cualquier aplicación, esté activa o inactiva, primero debes hallar el HWND (el handle de la ventana) a la que le quieres enviar pulsaciones,
    y por último utilizar la función SendMessage de la API de windows para postear el mensaje WM_KEYDOWN (256) o WM_CHAR (258) respectivamente de lo que pretendas enviar.

    SendMessage function - MSDN
    Keyboard Input Notifications - MSDN
    Virtual-Key Codes - MSDN
Pseudo-Código:
Código (vbnet) [Seleccionar]
NativeMethods.SendMessage(hWnd:=Window, msg:=WM_KEYDOWN, wParam:=VK_KEYCODE, lParam:=IntPtr.Zero)

Saludos