¿Cómo puedo crear mediante programación un evento que simule una tecla presionada en el teclado?
c#
.net
wpf
keyboard-events
Dan Vogel
fuente
fuente
Respuestas:
La pregunta está etiquetada como WPF, pero las respuestas hasta ahora son específicas de WinForms y Win32.
Para hacer esto en WPF, simplemente construya un KeyEventArgs y llame a RaiseEvent en el destino. Por ejemplo, para enviar un evento Insertar clave KeyDown al elemento actualmente enfocado:
Esta solución no se basa en llamadas nativas o internos de Windows y debería ser mucho más confiable que las demás. También le permite simular una pulsación de tecla en un elemento específico.
Tenga en cuenta que este código solo se aplica a los eventos PreviewKeyDown, KeyDown, PreviewKeyUp y KeyUp. Si desea enviar eventos TextInput, hará esto en su lugar:
También tenga en cuenta que:
Los controles esperan recibir eventos de vista previa, por ejemplo, PreviewKeyDown debe preceder a KeyDown
El uso de target.RaiseEvent (...) envía el evento directamente al destino sin metaprocesamiento como aceleradores, composición de texto e IME. Esto es normalmente lo que quieres. Por otro lado, si realmente hace qué simular las teclas del teclado reales por alguna razón, usaría InputManager.ProcessInput () en su lugar.
fuente
Keyboard.PrimaryDevice.ActiveSource
Ctrl+C
.)Para producir eventos clave sin el contexto de Windows Forms, podemos usar el siguiente método,
el código de muestra se da a continuación:
La lista de claves virtuales se define aquí .
Para obtener la imagen completa, utilice el siguiente enlace, http://tksinghal.blogspot.in/2011/04/how-to-press-and-hold-keyboard-key.html
fuente
No lo he usado, pero SendKeys puede hacer lo que quieras.
Microsoft tiene más ejemplos de uso aquí .
fuente
¡Fácilmente! (porque alguien más ya hizo el trabajo por nosotros ...)
Después de pasar mucho tiempo intentando esto con las respuestas sugeridas, me encontré con este proyecto de codeplex Windows Input Simulator que simplificó al máximo la simulación de presionar una tecla:
Instale el paquete, se puede hacer o desde el administrador de paquetes NuGet o desde la consola del administrador de paquetes como:
Utilice estas 2 líneas de código:
inputSimulator = new InputSimulator() inputSimulator.Keyboard.KeyDown(VirtualKeyCode.RETURN)
¡Y eso es!
-------EDITAR--------
La página del proyecto en codeplex está marcada por algún motivo, este es el enlace a la galería de NuGet.
fuente
API SendMessage de Windows con enviar WM_KEYDOWN .
fuente