Ada beberapa cara untuk menangkap mouse atau keyboard di bawah Windows. Jadi saya mencoba beberapa dari mereka, tetapi masing-masing memiliki beberapa kelebihan dan kekurangan. Saya ingin bertanya: Metode apa yang digunakan?
Saya sudah mencoba ini:
WM_KEYDOWN / WM_KEYUP - Kerugian utama adalah, saya tidak bisa membedakan antara kunci kiri dan kanan seperti ALT, CONTROL atau SHIFT.
GetKeyboardState - Ini memecahkan masalah metode pertama, tetapi ada yang baru. Ketika saya mendapatkan bahwa tombol Kanan-ALT ditekan, saya juga mendapatkan bahwa tombol Kiri-Kontrol turun. Perilaku ini hanya terjadi ketika menggunakan tata letak keyboard lokal (Czech - CS).
WM_INPUT (Input Mentah) - Metode ini juga tidak membedakan tombol kiri dan tangan kanan (jika saya ingat) dan untuk pergerakan mouse terkadang menghasilkan pesan dengan nilai nol delta posisi mouse.
Apakah ada alasan Anda tidak bisa menggabungkannya? Misalnya, gunakan WM_KEYDOWN untuk mendeteksi penekanan tombol Ctrl / Alt / Shift, maka di dalam panggilan itu gunakan GetKeyboardState () untuk membedakan kiri dari kanan?
sumber
WM_INPUT bagus. Saya pikir Anda dapat membedakan tombol kiri / kanan menggunakan struct RAWKEYBOARD . Bagian yang sulit mungkin mencari tahu bagaimana menangani pengidentifikasi kunci (yaitu scancodes), tapi saya tidak bisa mengatakannya karena saya belum pernah mencoba menggunakan ini untuk input keyboard. WM_KEYDOWN sangat mudah :)
Saya telah menggunakan WM_INPUT untuk input mouse. Tingkatnya sangat rendah. Tidak ada akselerasi yang diterapkan, yang sangat bagus (IMO). WM_INPUT dulunya satu-satunya cara untuk mengambil keuntungan dari pergerakan mouse dpi tinggi, tapi saya tidak yakin apakah itu masih terjadi. Lihat artikel MSDN ini dari 2006 .
DirectInput untuk mouse / keyboard secara eksplisit tidak disarankan oleh Microsoft. Lihat artikel MSDN yang ditautkan sebelumnya. Jika Anda membutuhkan joystick, XInput mungkin adalah cara yang harus dilakukan.
EDIT: Info saya tentang ini mungkin terlalu tanggal.
sumber
Sebenarnya, beri tahu L / R Ctrl / Alt ketika Anda menangkap WM_KEYDOWN / WM_KEYUP, Anda bisa. Mudah, bukan, tapi kode yang saya gunakan, di sini Anda bisa, hmm hmm.
Semoga ini masih berfungsi, saya lakukan.
sumber
Anda dapat mencoba DirectInput API , atau yang lebih baru, XInput API .
sumber