Jak mogę programowo utworzyć zdarzenie, które symulowałoby naciśnięcie klawisza na klawiaturze?
c#
.net
wpf
keyboard-events
Dan Vogel
źródło
źródło
Odpowiedzi:
Pytanie jest oznaczone jako WPF, ale dotychczasowe odpowiedzi to specyficzne WinForms i Win32.
Aby to zrobić w WPF, po prostu skonstruuj KeyEventArgs i wywołaj RaiseEvent w miejscu docelowym. Na przykład, aby wysłać zdarzenie klawisza Insert KeyDown do aktualnie aktywnego elementu:
To rozwiązanie nie opiera się na natywnych wywołaniach ani wewnętrznych elementach systemu Windows i powinno być znacznie bardziej niezawodne niż inne. Umożliwia także symulację naciśnięcia klawisza na określonym elemencie.
Należy pamiętać, że ten kod ma zastosowanie tylko do zdarzeń PreviewKeyDown, KeyDown, PreviewKeyUp i KeyUp. Jeśli chcesz wysyłać zdarzenia TextInput, zrób to:
Pamiętaj również, że:
Kontrolki oczekują, że będą odbierać zdarzenia Preview, na przykład PreviewKeyDown powinno poprzedzać KeyDown
Używanie target.RaiseEvent (...) wysyła zdarzenie bezpośrednio do celu bez meta-przetwarzania, takiego jak akceleratory, skład tekstu i IME. Zwykle tego chcesz. Z drugiej strony, jeśli naprawdę robisz coś, co z jakiegoś powodu symuluje rzeczywiste klawisze klawiatury, możesz zamiast tego użyć InputManager.ProcessInput ().
źródło
Keyboard.PrimaryDevice.ActiveSource
zobaczyć stackoverflow.com/questions/10820990/...Ctrl+C
.)Aby utworzyć kluczowe zdarzenia bez kontekstu Windows Forms, możemy użyć następującej metody,
przykładowy kod podano poniżej:
Lista kluczy wirtualnych jest zdefiniowana tutaj .
Aby uzyskać pełny obraz, użyj poniższego linku, http://tksinghal.blogspot.in/2011/04/how-to-press-and-hold-keyboard-key.html
źródło
Nie używałem tego, ale SendKeys może robić, co chcesz.
Firma Microsoft ma tutaj więcej przykładów użycia .
źródło
Z łatwością! (ponieważ ktoś inny wykonał już za nas pracę ...)
Po spędzeniu dużo czasu na próbowaniu tego z sugerowanymi odpowiedziami natknąłem się na ten projekt Codeplex Symulator wprowadzania systemu Windows, który uprościł symulację naciśnięcia klawisza:
Zainstaluj pakiet, można to zrobić lub z menedżera pakietów NuGet lub z konsoli menedżera pakietów, takich jak:
Użyj tych 2 wierszy kodu:
inputSimulator = new InputSimulator() inputSimulator.Keyboard.KeyDown(VirtualKeyCode.RETURN)
I to wszystko!
-------EDYTOWAĆ--------
Strona projektu w Codeplex jest oflagowana z jakiegoś powodu, to jest link do galerii NuGet.
źródło
Windows SendMessage API z wysyłaniem WM_KEYDOWN .
źródło