Partager via


Vue d’ensemble des entrées brutes

Il existe de nombreux appareils d’entrée utilisateur à côté du clavier et de la souris traditionnels. Par exemple, l’entrée utilisateur peut provenir d’un joystick, d’un écran tactile, d’un microphone ou d’autres appareils qui offrent une grande flexibilité dans l’entrée utilisateur. Ces appareils sont collectivement appelés appareils d’interface humaine (HID). L’API d’entrée brute offre aux applications un moyen stable et robuste d’accepter les entrées brutes provenant de n’importe quel hid, y compris le clavier et la souris.

Cette section couvre les sujets suivants :

Modèle d’entrée brute

Auparavant, le clavier et la souris généraient généralement des données d’entrée. Le système a interprété les données provenant de ces appareils d’une manière qui a éliminé les détails spécifiques de l’appareil des informations brutes. Par exemple, le clavier génère le code d’analyse spécifique à l’appareil, mais le système fournit une application avec le code de clé virtuelle. En plus de masquer les détails de l’entrée brute, le gestionnaire de fenêtres ne prenait pas en charge tous les nouveaux HID. Pour obtenir l’entrée des HID non pris en charge, une application devait effectuer de nombreuses opérations : ouvrir l’appareil, gérer le mode partagé, lire régulièrement l’appareil ou configurer le port d’achèvement des E/S, etc. Le modèle d’entrée brute et les API associées ont été développés pour permettre un accès simple à l’entrée brute à partir de tous les périphériques d’entrée, y compris le clavier et la souris.

Le modèle d’entrée brut est différent du modèle d’entrée Windows d’origine pour le clavier et la souris. Dans le modèle d’entrée d’origine, une application reçoit une entrée indépendante de l’appareil sous la forme de messages envoyés ou publiés dans ses fenêtres, tels que WM_CHAR, WM_MOUSEMOVE et WM_APPCOMMAND. En revanche, pour une entrée brute, une application doit inscrire les appareils à partir duquel elle souhaite obtenir des données. En outre, l’application obtient l’entrée brute via le message WM_INPUT .

Le modèle d’entrée brut présente plusieurs avantages :

  • Une application n’a pas besoin de détecter ou d’ouvrir le périphérique d’entrée.
  • Une application obtient les données directement à partir de l’appareil et les traite pour ses besoins.
  • Une application peut distinguer la source de l’entrée même si elle provient du même type d’appareil. Par exemple, deux appareils à souris.
  • Une application gère le trafic de données en spécifiant des données provenant d’une collection d’appareils ou de types d’appareils spécifiques uniquement.
  • Les appareils HID peuvent être utilisés à mesure qu’ils deviennent disponibles sur la Place de marché, sans attendre que de nouveaux types de messages ou un système d’exploitation mis à jour aient de nouvelles commandes dans WM_APPCOMMAND.

Notez que WM_APPCOMMAND fournit pour certains appareils HID. Toutefois, WM_APPCOMMAND est un événement d’entrée indépendant de l’appareil de niveau supérieur, tandis que WM_INPUT envoie des données brutes de bas niveau spécifiques à un appareil.

Inscription pour l’entrée brute

Par défaut, aucune application ne reçoit d’entrée brute. Pour recevoir une entrée brute d’un appareil, une application doit inscrire l’appareil.

Pour inscrire des appareils, une application crée d’abord un tableau de structures RAWINPUTDEVICE qui spécifient la collection de niveau supérieur (TLC) pour les appareils qu’elle souhaite. Le TLC est défini par une page d’utilisation (classe de l’appareil) et un ID d’utilisation (l’appareil au sein de la classe). Par exemple, pour obtenir le TLC du clavier, définissez UsagePage = 0x01 et UsageID = 0x06. L’application appelle RegisterRawInputDevices pour inscrire les appareils.

Notez qu’une application peut inscrire un appareil qui n’est pas actuellement attaché au système. Lorsque cet appareil est attaché, le Gestionnaire Windows envoie automatiquement l’entrée brute à l’application. Pour obtenir la liste des périphériques d’entrée brute sur le système, une application appelle GetRawInputDeviceList. À l’aide du hDevice de cet appel, une application appelle GetRawInputDeviceInfo pour obtenir les informations de l’appareil.

Par le biais du membre dwFlags de RAWINPUTDEVICE, une application peut sélectionner les appareils à écouter et ceux qu’elle souhaite ignorer. Par exemple, une application peut demander une entrée à tous les appareils de téléphonie, à l’exception des répondeurs. Pour obtenir un exemple de code, consultez Inscription pour l’entrée brute.

Notez que la souris et le clavier sont également des HID, de sorte que les données de ceux-ci peuvent passer à la fois par le message HID WM_INPUT et à partir de messages traditionnels. Une application peut sélectionner l’une ou l’autre des méthodes en sélectionnant correctement les indicateurs dans RAWINPUTDEVICE.

Pour obtenir le status d’inscription d’une application, appelez GetRegisteredRawInputDevices à tout moment.

Lecture de l’entrée brute

Une application reçoit une entrée brute de toute hid dont la collection de niveau supérieur (TLC) correspond à un TLC de l’inscription. Lorsqu’une application reçoit une entrée brute, sa file d’attente de messages obtient un message WM_INPUT et l’indicateur de status de file d’attente QS_RAWINPUT est défini (QS_INPUT inclut également cet indicateur). Une application peut recevoir des données lorsqu’elles se trouvent au premier plan et en arrière-plan.

Il existe deux façons de lire les données brutes : la méthode unbuffered (ou standard) et la méthode mise en mémoire tampon. La méthode unbuffered obtient les données brutes d’une structure RAWINPUT à la fois et est appropriée pour de nombreux HID. Ici, l’application appelle GetMessage pour obtenir le message WM_INPUT . Ensuite, l’application appelle GetRawInputData à l’aide du handle RAWINPUT contenu dans WM_INPUT. Pour obtenir un exemple, consultez Exécution d’une lecture standard d’entrée brute.

En revanche, la méthode mise en mémoire tampon obtient un tableau de structures RAWINPUT à la fois. Cette option est fournie pour les appareils qui peuvent produire de grandes quantités d’entrée brute. Dans cette méthode, l’application appelle GetRawInputBuffer pour obtenir un tableau de structures RAWINPUT . Notez que la macro NEXTRAWINPUTBLOCK est utilisée pour parcourir un tableau de structures RAWINPUT . Pour obtenir un exemple, consultez Exécution d’une lecture mise en mémoire tampon d’une entrée brute.

Pour interpréter l’entrée brute, des informations détaillées sur les HID sont requises. Une application obtient les informations de l’appareil en appelant GetRawInputDeviceInfo avec le handle de l’appareil. Ce handle peut provenir de WM_INPUT ou du membre hDevice de RAWINPUTHEADER.

Voir aussi