Cara mensimulasikan peristiwa keyboard (Formulir Windows .NET)
Formulir Windows menyediakan beberapa opsi untuk mensimulasikan input keyboard secara terprogram. Artikel ini menyediakan gambaran umum tentang opsi ini.
Penting
Dokumentasi Panduan Desktop untuk .NET 7 dan .NET 6 sedang dibangun.
Menggunakan SendKeys
Formulir Windows menyediakan System.Windows.Forms.SendKeys kelas untuk mengirim penekanan kunci ke aplikasi aktif. Ada dua metode untuk mengirim penekanan kunci ke aplikasi: SendKeys.Send dan SendKeys.SendWait. Perbedaan antara kedua metode adalah yang SendWait
memblokir utas saat ini ketika penekanan tombol dikirim, menunggu respons, meskipun Send
tidak. Untuk informasi selengkapnya tentang SendWait
, lihat Untuk mengirim penekanan kunci ke aplikasi lain.
Perhatian
Jika aplikasi Anda ditujukan untuk penggunaan internasional dengan berbagai keyboard, penggunaan SendKeys.Send dapat menghasilkan hasil yang tidak dapat diprediksi dan harus dihindari.
Di balik layar, SendKeys
menggunakan implementasi Windows yang lebih lama untuk mengirim input, yang mungkin gagal pada Windows modern di mana aplikasi diharapkan tidak berjalan dengan hak administratif. Jika implementasi yang lebih lama gagal, kode secara otomatis mencoba implementasi Windows yang lebih baru untuk mengirim input. Selain itu, ketika SendKeys kelas menggunakan implementasi baru, SendWait metode tidak lagi memblokir utas saat ini saat mengirim penekanan kunci ke aplikasi lain.
Penting
Jika aplikasi Anda bergantung pada perilaku yang konsisten terlepas dari sistem operasi, Anda dapat memaksa SendKeys kelas untuk menggunakan implementasi baru dengan menambahkan pengaturan aplikasi berikut ke file app.config Anda.
<appSettings>
<add key="SendKeys" value="SendInput"/>
</appSettings>
Untuk memaksa SendKeys kelas hanya menggunakan implementasi sebelumnya, gunakan nilai "JournalHook"
sebagai gantinya.
Untuk mengirim penekanan tombol ke aplikasi yang sama
SendKeys.Send Panggil metode atau SendKeys.SendWait kelas SendKeys . Penekanan kunci yang ditentukan akan diterima oleh kontrol aktif aplikasi.
Contoh kode berikut menggunakan Send
untuk mensimulasikan penekanan tombol ALT dan DOWN bersama-sama. Penekanan ComboBox tombol ini menyebabkan kontrol menampilkan dropdown-nya. Contoh ini mengasumsikan Form dengan Button dan ComboBox.
private void button1_Click(object sender, EventArgs e)
{
comboBox1.Focus();
SendKeys.Send("%+{DOWN}");
}
Private Sub Button1_Click(sender As Object, e As EventArgs)
ComboBox1.Focus()
SendKeys.Send("%+{DOWN}")
End Sub
Untuk mengirim penekanan tombol ke aplikasi lain
Metode SendKeys.Send dan SendKeys.SendWait mengirim penekanan kunci ke aplikasi aktif, yang biasanya merupakan aplikasi tempat Anda mengirim penekanan kunci. Untuk mengirim penekanan tombol ke aplikasi lain, Pertama-tama Anda perlu mengaktifkannya. Karena tidak ada metode terkelola untuk mengaktifkan aplikasi lain, Anda harus menggunakan metode Windows asli untuk memfokuskan aplikasi lain. Contoh kode berikut menggunakan pemanggilan platform untuk memanggil FindWindow
metode dan SetForegroundWindow
untuk mengaktifkan jendela aplikasi Kalkulator, lalu memanggil Send
untuk mengeluarkan serangkaian perhitungan ke aplikasi Kalkulator.
Contoh kode berikut menggunakan Send
untuk mensimulasikan menekan tombol ke dalam aplikasi Kalkulator Windows 10. Ini pertama-tama mencari jendela aplikasi dengan judul Calculator
dan kemudian mengaktifkannya. Setelah diaktifkan, penekanan tombol dikirim untuk menghitung 10 plus 10.
[DllImport("USER32.DLL", CharSet = CharSet.Unicode)]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("USER32.DLL")]
public static extern bool SetForegroundWindow(IntPtr hWnd);
private void button1_Click(object sender, EventArgs e)
{
IntPtr calcWindow = FindWindow(null, "Calculator");
if (SetForegroundWindow(calcWindow))
SendKeys.Send("10{+}10=");
}
<Runtime.InteropServices.DllImport("USER32.DLL", CharSet:=Runtime.InteropServices.CharSet.Unicode)>
Public Shared Function FindWindow(lpClassName As String, lpWindowName As String) As IntPtr : End Function
<Runtime.InteropServices.DllImport("USER32.DLL")>
Public Shared Function SetForegroundWindow(hWnd As IntPtr) As Boolean : End Function
Private Sub Button1_Click(sender As Object, e As EventArgs)
Dim hCalcWindow As IntPtr = FindWindow(Nothing, "Calculator")
If SetForegroundWindow(hCalcWindow) Then
SendKeys.Send("10{+}10=")
End If
End Sub
Menggunakan metode OnEventName
Cara term mudah untuk mensimulasikan peristiwa keyboard adalah dengan memanggil metode pada objek yang menaikkan peristiwa. Sebagian besar peristiwa memiliki metode yang sesuai yang memanggilnya, dinamai dalam pola On
diikuti oleh EventName
, seperti OnKeyPress
. Opsi ini hanya dimungkinkan dalam kontrol atau formulir kustom, karena metode ini dilindungi dan tidak dapat diakses dari luar konteks kontrol atau formulir.
Metode yang dilindungi ini tersedia untuk mensimulasikan peristiwa keyboard.
OnKeyDown
OnKeyPress
OnKeyUp
Untuk informasi selengkapnya tentang peristiwa ini, lihat Menggunakan peristiwa keyboard (Formulir Windows .NET).
Baca juga
.NET Desktop feedback
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk