Panoramica dell'input non elaborato

Ci sono molti dispositivi di input utente accanto alla tastiera e al mouse tradizionali. Ad esempio, l'input dell'utente può provenire da un joystick, da un touch screen, da un microfono o da altri dispositivi che consentono una grande flessibilità nell'input dell'utente. Questi dispositivi sono collettivamente noti come dispositivi HID (Human Interface Devices). L'API di input non elaborato offre alle applicazioni un modo stabile e affidabile per accettare input non elaborato da qualsiasi HID, tra cui la tastiera e il mouse.

Questa sezione contiene gli argomenti seguenti:

Modello di input non elaborato

In precedenza, la tastiera e il mouse generavano in genere dati di input. Il sistema ha interpretato i dati provenienti da questi dispositivi in modo da eliminare i dettagli specifici del dispositivo delle informazioni non elaborate. Ad esempio, la tastiera genera il codice di analisi specifico del dispositivo, ma il sistema fornisce un'applicazione con il codice del tasto virtuale. Oltre a nascondere i dettagli dell'input non elaborato, gestione finestre non supporta tutti i nuovi HID. Per ottenere l'input dagli HID non supportati, un'applicazione deve eseguire molte operazioni: aprire il dispositivo, gestire la modalità condivisa, leggere periodicamente il dispositivo o configurare la porta di completamento di I/O e così via. Il modello di input non elaborato e le API associate sono stati sviluppati per consentire l'accesso semplice all'input non elaborato da tutti i dispositivi di input, tra cui la tastiera e il mouse.

Il modello di input non elaborato è diverso dal modello di input di Windows originale per la tastiera e il mouse. Nel modello di input originale, un'applicazione riceve un input indipendente dal dispositivo sotto forma di messaggi inviati o inviati alle finestre, ad esempio WM_CHAR, WM_MOUSEMOVE e WM_APPCOMMAND. Al contrario, per l'input non elaborato da un'applicazione deve registrare i dispositivi da cui vuole ottenere i dati. Inoltre, l'applicazione ottiene l'input non elaborato tramite il messaggio WM_INPUT .

Esistono diversi vantaggi per il modello di input non elaborato:

  • Un'applicazione non deve rilevare o aprire il dispositivo di input.
  • Un'applicazione ottiene i dati direttamente dal dispositivo ed elabora i dati per le proprie esigenze.
  • Un'applicazione può distinguere l'origine dell'input anche se è dello stesso tipo di dispositivo. Ad esempio, due dispositivi mouse.
  • Un'applicazione gestisce il traffico di dati specificando i dati da una raccolta di dispositivi o solo tipi di dispositivo specifici.
  • I dispositivi HID possono essere usati quando diventano disponibili nel marketplace, senza attendere nuovi tipi di messaggio o un sistema operativo aggiornato per avere nuovi comandi in WM_APPCOMMAND.

Si noti che WM_APPCOMMAND fornisce alcuni dispositivi HID. Tuttavia, WM_APPCOMMAND è un evento di input indipendente dal dispositivo di livello superiore, mentre WM_INPUT invia dati non elaborati e di basso livello specifici di un dispositivo.

Registrazione per l'input non elaborato

Per impostazione predefinita, nessuna applicazione riceve input non elaborato. Per ricevere l'input non elaborato da un dispositivo, un'applicazione deve registrare il dispositivo.

Per registrare i dispositivi, un'applicazione crea innanzitutto una matrice di strutture RAWINPUTDEVICE che specificano la raccolta di livello superiore (TLC) per i dispositivi desiderati. Il TLC è definito da una pagina di utilizzo (la classe del dispositivo) e un ID utilizzo (il dispositivo all'interno della classe). Ad esempio, per ottenere il TLC della tastiera, impostare UsagePage = 0x01 e UsageID = 0x06. L'applicazione chiama RegisterRawInputDevices per registrare i dispositivi.

Si noti che un'applicazione può registrare un dispositivo attualmente non collegato al sistema. Quando questo dispositivo è collegato, Windows Manager invierà automaticamente l'input non elaborato all'applicazione. Per ottenere l'elenco dei dispositivi di input non elaborati nel sistema, un'applicazione chiama GetRawInputDeviceList. Usando hDevice da questa chiamata, un'applicazione chiama GetRawInputDeviceInfo per ottenere le informazioni sul dispositivo.

Tramite il membro dwFlags di RAWINPUTDEVICE, un'applicazione può selezionare i dispositivi da ascoltare e anche quelli che vuole ignorare. Ad esempio, un'applicazione può richiedere l'input da tutti i dispositivi di telefonia, ad eccezione dei computer di risposta. Per il codice di esempio, vedere Registrazione per l'input non elaborato.

Si noti che anche il mouse e la tastiera sono HID, quindi i dati da essi possono venire attraverso il messaggio HID WM_INPUT e dai messaggi tradizionali. Un'applicazione può selezionare uno dei metodi in base alla selezione corretta dei flag in RAWINPUTDEVICE.

Per ottenere lo stato di registrazione di un'applicazione, chiamare GetRegisteredRawInputDevices in qualsiasi momento.

Lettura dell'input non elaborato

Un'applicazione riceve l'input non elaborato da qualsiasi HID la cui raccolta di primo livello (TLC) corrisponde a un TLC dalla registrazione. Quando un'applicazione riceve l'input non elaborato, la coda dei messaggi ottiene un messaggio WM_INPUT e viene impostato il flag di stato della coda QS_RAWINPUT (QS_INPUT include anche questo flag). Un'applicazione può ricevere dati in primo piano e quando è in background.

Esistono due modi per leggere i dati non elaborati: il metodo senza buffer (o standard) e il metodo memorizzato nel buffer. Il metodo senza buffer ottiene i dati non elaborati una struttura RAWINPUT alla volta ed è adeguata per molti HID. In questo caso, l'applicazione chiama GetMessage per ottenere il messaggio WM_INPUT . L'applicazione chiama quindi GetRawInputData usando l'handle RAWINPUT contenuto in WM_INPUT. Per un esempio, vedere Lettura standard dell'input non elaborato.

Al contrario, il metodo memorizzato nel buffer ottiene una matrice di strutture RAWINPUT alla volta. Questo viene fornito per i dispositivi che possono produrre grandi quantità di input non elaborato. In questo metodo l'applicazione chiama GetRawInputBuffer per ottenere una matrice di strutture RAWINPUT . Si noti che la macro NEXTRAWINPUTBLOCK viene usata per attraversare una matrice di strutture RAWINPUT . Per un esempio, vedere Operazione di lettura memorizzata nel buffer dell'input non elaborato.

Per interpretare l'input non elaborato, sono necessarie informazioni dettagliate sugli HID. Un'applicazione ottiene le informazioni sul dispositivo chiamando GetRawInputDeviceInfo con l'handle del dispositivo. Questo handle può provenire da WM_INPUT o dal membro hDevice di RAWINPUTHEADER.

Vedi anche