Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Ada banyak perangkat input pengguna di samping keyboard dan mouse tradisional. Misalnya, input pengguna dapat berasal dari joystick, layar sentuh, mikrofon, atau perangkat lain yang memungkinkan fleksibilitas besar dalam input pengguna. Perangkat ini secara kolektif dikenal sebagai Perangkat Antarmuka Manusia (HID). API input mentah menyediakan cara yang stabil dan kuat bagi aplikasi untuk menerima input mentah dari HID apa pun, termasuk keyboard dan mouse.
Bagian ini membahas topik-topik berikut:
Model Input Mentah
Sebelumnya, keyboard dan mouse biasanya menghasilkan data input. Sistem menginterpretasikan data yang berasal dari perangkat ini dengan cara yang menghilangkan detail spesifik perangkat dari informasi mentah. Misalnya, keyboard menghasilkan kode pemindaian khusus perangkat tetapi sistem menyediakan aplikasi dengan kode kunci virtual. Selain menyembunyikan detail input mentah, manajer jendela tidak mendukung semua HID baru. Untuk mendapatkan input dari HID yang tidak didukung, aplikasi harus melakukan banyak hal: membuka perangkat, mengelola mode bersama, membaca perangkat secara berkala atau menyiapkan port penyelesaian I/O, dan sebagainya. Model input mentah dan API terkait dikembangkan untuk memungkinkan akses sederhana ke input mentah dari semua perangkat input, termasuk keyboard dan mouse.
Model input mentah berbeda dari model input Windows asli untuk keyboard dan mouse. Dalam model input asli, aplikasi menerima input independen perangkat dalam bentuk pesan yang dikirim atau diposting ke jendelanya, seperti WM_CHAR, WM_MOUSEMOVE, dan WM_APPCOMMAND. Sebaliknya, untuk input mentah, aplikasi harus mendaftarkan perangkat yang ingin dia dapatkan datanya. Selain itu, aplikasi mendapatkan input mentah melalui pesan WM_INPUT .
Ada beberapa keuntungan dari model input mentah:
- Aplikasi tidak perlu mendeteksi atau membuka perangkat input.
- Aplikasi mendapatkan data langsung dari perangkat, dan memproses data untuk kebutuhannya.
- Aplikasi dapat membedakan sumber input meskipun berasal dari jenis perangkat yang sama. Misalnya, dua perangkat mouse.
- Aplikasi mengelola lalu lintas data dengan menentukan data dari kumpulan perangkat atau hanya jenis perangkat tertentu.
- Perangkat HID dapat digunakan saat tersedia di marketplace, tanpa menunggu jenis pesan baru atau OS yang diperbarui untuk memiliki perintah baru di WM_APPCOMMAND.
Perhatikan bahwa WM_APPCOMMAND menyediakan beberapa perangkat HID. Namun, WM_APPCOMMAND adalah peristiwa input tingkat tinggi yang independen dari perangkat, sementara WM_INPUT mengirim data mentah, tingkat rendah yang khusus untuk sebuah perangkat.
Pendaftaran Input Mentah
Secara default, tidak ada aplikasi yang menerima input mentah. Untuk menerima input mentah dari perangkat, aplikasi harus mendaftarkan perangkat.
Untuk mendaftarkan perangkat, aplikasi terlebih dahulu membuat array struktur RAWINPUTDEVICE yang menentukan koleksi tingkat atas (TLC) untuk perangkat yang diinginkan. TLC ditentukan oleh Halaman Penggunaan (kelas perangkat) dan ID Penggunaan (perangkat dalam kelas ). Misalnya, untuk mendapatkan TLC keyboard, atur UsagePage = 0x01 dan UsageID = 0x06. Aplikasi memanggil RegisterRawInputDevices untuk mendaftarkan perangkat.
Perhatikan bahwa aplikasi dapat mendaftarkan perangkat yang saat ini tidak terpasang pada sistem. Ketika perangkat ini terpasang, Pengelola Windows akan secara otomatis mengirim input mentah ke aplikasi. Untuk mendapatkan daftar perangkat input mentah pada sistem, aplikasi memanggil GetRawInputDeviceList. Menggunakan hDevice dari panggilan ini, aplikasi memanggil GetRawInputDeviceInfo untuk mendapatkan informasi perangkat.
Melalui anggota dwFlagsRAWINPUTDEVICE, aplikasi dapat memilih perangkat untuk didengarkan dan juga yang ingin diabaikan. Misalnya, aplikasi dapat meminta input dari semua perangkat telepon kecuali untuk mesin penjawab. Untuk kode sampel, lihat Mendaftar untuk Input Raw.
Perhatikan bahwa mouse dan keyboard juga merupakan HID, sehingga data dari mereka dapat datang melalui pesan HID WM_INPUT dan dari pesan tradisional. Aplikasi dapat memilih salah satu metode dengan pilihan bendera yang tepat di RAWINPUTDEVICE.
Untuk mendapatkan status pendaftaran aplikasi, hubungi GetRegisteredRawInputDevices kapan saja.
Membaca Input Mentah
Aplikasi menerima input mentah dari HID apa pun yang koleksi tingkat atas (TLC) cocok dengan TLC dari registrasi. Saat aplikasi menerima input mentah, antrean pesannya mendapatkan pesan WM_INPUT dan bendera status antrean QS_RAWINPUT diatur (QS_INPUT juga menyertakan bendera ini). Aplikasi dapat menerima data ketika berada di latar depan dan ketika berada di latar belakang (jika terdaftar dengan RIDEV_INPUTSINK).
Ada dua cara untuk membaca data mentah: metode standar dan metode buffer.
Metode standar membaca satu struktur RAWINPUT sekaligus dan memadai untuk sebagian besar perangkat. Aplikasi memanggil GetMessage untuk mengambil pesan WM_INPUT , lalu memanggil GetRawInputData dengan handel HRAWINPUT yang diteruskan di lParam. Misalnya, lihat Melakukan Pembacaan Standar Input Mentah.
Metode Buffered membaca array struktur RAWINPUT sekaligus dan berguna untuk perangkat frekuensi tinggi seperti mouse pada 1000Hz, di mana beberapa peristiwa dapat terakumulasi di antara iterasi loop pesan. Aplikasi memanggil GetRawInputBuffer untuk menguras semua akumulasi peristiwa dalam satu batch. Gunakan makro NEXTRAWINPUTBLOCK untuk melintasi array yang dihasilkan.
Penting
GetMessage menghapus WM_INPUT saat ini dari antrean input mentah sebelum kembali. Akibatnya, GetRawInputBuffer tidak akan melihat peristiwa saat ini — hanya peristiwa yang tiba setelahnya. Saat menggabungkan kedua metode, pola yang benar adalah:
- Panggil GetRawInputData dengan handle lParam untuk membaca peristiwa saat ini.
- Panggil GetRawInputBuffer dalam loop untuk memproses semua event tambahan yang terkumpul dalam antrian.
Misalnya, lihat Melakukan Pembacaan Masukan Mentah secara Batch.
Untuk menginterpretasikan input mentah, informasi terperinci tentang HID mungkin diperlukan. Aplikasi mendapatkan informasi perangkat dengan memanggil GetRawInputDeviceInfo dengan handel perangkat. Handle ini dapat berasal dari lParam atau WM_INPUT melalui GetRawInputData dengan RID_HEADER, atau dari anggota hDevice dalam RAWINPUTHEADER.