Condividi tramite


Panoramica dell'input non elaborato

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

In questa sezione vengono illustrati gli argomenti seguenti:

Modello di input grezzo

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 dalle informazioni grezze. 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, il gestore delle finestre non supportava tutti i nuovi HID. Per ottenere input dagli HID non supportati, un'applicazione doveva eseguire molte operazioni: aprire il dispositivo, gestire la modalità condivisa, leggere periodicamente il dispositivo o configurare la porta di completamento 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, inclusa 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_MOUSEMOVEe WM_APPCOMMAND. Al contrario, per l'input non elaborato un'applicazione deve registrare i dispositivi da cui vuole ottenere i dati. Inoltre, l'applicazione ottiene l'input non elaborato tramite il messaggio di 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 del mouse.
  • Un'applicazione gestisce il traffico dei dati specificando i dati da una raccolta di dispositivi o solo tipi di dispositivo specifici.
  • I dispositivi HID possono essere usati man mano che 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 prima di tutto una matrice di strutture RAWINPUTDEVICE che specificano l'raccolta di primo livello (TLC) per i dispositivi desiderati. Il TLC è definito da una pagina di utilizzo (la classe del dispositivo) e da un ID di 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 il 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 il hDevice da questa chiamata, un'applicazione chiama GetRawInputDeviceInfo per ottenere le informazioni sul dispositivo.

Tramite il dwFlags membro 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 dell'input grezzo.

Si noti che anche il mouse e la tastiera sono HID, quindi i dati da essi possono provenire attraverso il messaggio HID WM_INPUT e dai messaggi tradizionali. Un'applicazione può selezionare uno dei due 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 il cui raccolta di primo livello (TLC) corrisponde a un TLC dalla registrazione. Quando un'applicazione riceve l'input grezzo, la sua coda dei messaggi riceve un messaggio WM_INPUT e il flag di stato della coda QS_RAWINPUT viene impostato (ancheQS_INPUT include questo flag). Un'applicazione può ricevere dati in primo piano e 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 non memorizzato nel 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 di WM_INPUT. L'applicazione chiama quindi GetRawInputData usando l'handle RAWINPUT contenuto in WM_INPUT. Per un esempio, vedere "Eseguire una lettura standard di 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 Eseguire una 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 diRAWINPUTHEADER.

Vedere anche