Bagikan melalui


Gambaran Umum Input Mentah

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 tempatnya ingin mendapatkan data. Selain itu, aplikasi mendapatkan input mentah melalui pesan WM_INPUT .

Ada beberapa keuntungan dari model input mentah:

  • Aplikasi tidak harus 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 memiliki perintah baru di WM_APPCOMMAND.

Perhatikan bahwa WM_APPCOMMAND menyediakan beberapa perangkat HID. Namun, WM_APPCOMMAND adalah peristiwa input independen perangkat tingkat lebih tinggi, sementara WM_INPUT mengirim data tingkat mentah dan rendah yang khusus untuk perangkat.

Pendaftaran untuk 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 diinginkannya. TLC ditentukan oleh Halaman Penggunaan (kelas perangkat) dan ID Penggunaan (perangkat dalam kelas ). Misalnya, untuk mendapatkan keyboard TLC, 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 Mentah.

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 pemilihan bendera yang tepat di RAWINPUTDEVICE.

Untuk mendapatkan status pendaftaran aplikasi, hubungi GetRegisteredRawInputDevices kapan saja.

Membaca Input Mentah

Aplikasi menerima input mentah dari HID mana pun yang koleksi tingkat atasnya (TLC) cocok dengan TLC dari pendaftaran. Ketika 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.

Ada dua cara untuk membaca data mentah: metode unbuffered (atau standar) dan metode buffered. Metode yang tidak dibuffered mendapatkan data mentah satu struktur RAWINPUT pada satu waktu dan memadai untuk banyak HID. Di sini, aplikasi memanggil GetMessage untuk mendapatkan pesan WM_INPUT . Kemudian aplikasi memanggil GetRawInputData menggunakan handel RAWINPUT yang terkandung dalam WM_INPUT. Misalnya, lihat Melakukan Baca Standar Input Mentah.

Sebaliknya, metode yang di-buffer mendapatkan array struktur RAWINPUT pada satu waktu. Ini disediakan untuk perangkat yang dapat menghasilkan input mentah dalam jumlah besar. Dalam metode ini, aplikasi memanggil GetRawInputBuffer untuk mendapatkan array struktur RAWINPUT . Perhatikan bahwa makro NEXTRAWINPUTBLOCK digunakan untuk melintasi array struktur RAWINPUT . Misalnya, lihat Melakukan Buffered Read of Raw Input.

Untuk menginterpretasikan input mentah, diperlukan informasi terperinci tentang HID. Aplikasi mendapatkan informasi perangkat dengan memanggil GetRawInputDeviceInfo dengan handel perangkat. Handel ini dapat berasal dari WM_INPUT atau dari anggota hDeviceRAWINPUTHEADER.

Lihat juga