Como posso criar programaticamente um evento que simule uma tecla sendo pressionada no teclado?
c#
.net
wpf
keyboard-events
Dan Vogel
fonte
fonte
Respostas:
A pergunta está marcada como WPF, mas as respostas até agora são WinForms e Win32 específicos.
Para fazer isso no WPF, basta construir um KeyEventArgs e chamar RaiseEvent no destino. Por exemplo, para enviar um evento KeyDown da tecla Insert para o elemento atualmente em foco:
Esta solução não depende de chamadas nativas ou internas do Windows e deve ser muito mais confiável do que as outras. Também permite simular um pressionamento de tecla em um elemento específico.
Observe que este código só se aplica a eventos PreviewKeyDown, KeyDown, PreviewKeyUp e KeyUp. Se você quiser enviar eventos TextInput, faça o seguinte:
Observe também que:
Os controles esperam receber eventos de visualização, por exemplo, PreviewKeyDown deve preceder KeyDown
O uso de target.RaiseEvent (...) envia o evento diretamente para o destino sem meta-processamento, como aceleradores, composição de texto e IME. Normalmente é isso que você deseja. Por outro lado, se você realmente fizer o que simular as teclas reais do teclado por algum motivo, deverá usar InputManager.ProcessInput ().
fonte
Keyboard.PrimaryDevice.ActiveSource
ver stackoverflow.com/questions/10820990/…Ctrl+C
.)Para produzir eventos chave sem o contexto do Windows Forms, podemos usar o seguinte método,
o código de amostra é fornecido abaixo:
A lista de chaves virtuais é definida aqui .
Para obter a imagem completa, use o link abaixo, http://tksinghal.blogspot.in/2011/04/how-to-press-and-hold-keyboard-key.html
fonte
Eu não usei, mas SendKeys pode fazer o que você quiser.
A Microsoft tem mais alguns exemplos de uso aqui .
fonte
Facilmente! (porque outra pessoa já fez o trabalho para nós ...)
Depois de passar muito tempo tentando fazer isso com as respostas sugeridas, me deparei com este projeto codeplex do Windows Input Simulator que simplificou ao máximo a simulação de um pressionamento de tecla:
A instalação do pacote pode ser feita a partir do gerenciador de pacotes NuGet ou do console do gerenciador de pacotes como:
Use estas 2 linhas de código:
inputSimulator = new InputSimulator() inputSimulator.Keyboard.KeyDown(VirtualKeyCode.RETURN)
E é isso!
-------EDITAR--------
A página do projeto no codeplex está sinalizada por algum motivo, este é o link para a galeria NuGet.
fonte
API Windows SendMessage com send WM_KEYDOWN .
fonte