Bagaimana saya bisa secara terprogram membuat acara yang akan mensimulasikan tombol yang ditekan pada keyboard?
c#
.net
wpf
keyboard-events
Dan Vogel
sumber
sumber
Jawaban:
Pertanyaannya diberi tag WPF tetapi jawabannya sejauh ini adalah WinForms dan Win32 spesifik.
Untuk melakukan ini di WPF, cukup buat KeyEventArgs dan panggil RaiseEvent pada target. Misalnya, untuk mengirim acara Sisipkan KeyDown ke elemen yang saat ini difokuskan:
Solusi ini tidak bergantung pada panggilan asli atau internal Windows dan harus jauh lebih andal daripada yang lain. Ini juga memungkinkan Anda untuk mensimulasikan penekanan tombol pada elemen tertentu.
Perhatikan bahwa kode ini hanya berlaku untuk peristiwa PreviewKeyDown, KeyDown, PreviewKeyUp, dan KeyUp. Jika Anda ingin mengirim peristiwa TextInput, Anda akan melakukan ini sebagai gantinya:
Perhatikan juga bahwa:
Kontrol mengharapkan untuk menerima peristiwa Pratinjau, misalnya PreviewKeyDown harus mendahului KeyDown
Menggunakan target.RaiseEvent (...) mengirimkan peristiwa langsung ke target tanpa meta-processing seperti akselerator, komposisi teks, dan IME. Ini biasanya yang Anda inginkan. Di sisi lain, jika Anda benar-benar melakukan apa untuk mensimulasikan tombol keyboard sebenarnya karena alasan tertentu, Anda akan menggunakan InputManager.ProcessInput () sebagai gantinya.
sumber
Keyboard.PrimaryDevice.ActiveSource
lihat stackoverflow.com/questions/10820990/…Ctrl+C
)Untuk menghasilkan peristiwa kunci tanpa Konteks Formulir Windows, kita dapat menggunakan metode berikut,
kode contoh diberikan di bawah ini:
Daftar Kunci Virtual ditentukan di sini .
Untuk mendapatkan gambaran lengkapnya, silakan gunakan tautan di bawah ini, http://tksinghal.blogspot.in/2011/04/how-to-press-and-hold-keyboard-key.html
sumber
Saya belum menggunakannya, tetapi SendKeys mungkin melakukan apa yang Anda inginkan.
Microsoft memiliki beberapa contoh penggunaan lainnya di sini .
sumber
Mudah! (karena orang lain sudah melakukan pekerjaan untuk kita ...)
Setelah menghabiskan banyak waktu mencoba ini dengan jawaban yang disarankan, saya menemukan proyek codeplex ini Windows Input Simulator yang membuatnya sesederhana mungkin untuk mensimulasikan penekanan tombol:
Instal paketnya, bisa dilakukan atau dari manajer paket NuGet atau dari konsol manajer paket seperti:
Gunakan 2 baris kode ini:
inputSimulator = new InputSimulator() inputSimulator.Keyboard.KeyDown(VirtualKeyCode.RETURN)
Dan itu dia!
------- EDIT --------
Halaman proyek pada codeplex ditandai karena beberapa alasan, ini adalah tautan ke galeri NuGet.
sumber
Windows SendMessage API dengan send WM_KEYDOWN .
sumber