Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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 permettent 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 fournit un moyen stable et robuste pour les applications d’accepter les entrées brutes de n’importe quel hid, y compris le clavier et la souris.
Cette section traite des rubriques suivantes :
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 de manière à éliminer les détails spécifiques à 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. Outre le masquage des détails de l’entrée brute, le gestionnaire de fenêtres ne prenait pas en charge toutes les nouvelles HID. Pour obtenir une entrée à partir des HID non pris en charge, une application a dû 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 aux entrées brutes de tous les appareils d’entrée, y compris le clavier et la souris.
Le modèle d’entrée brute 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, telles 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 .
Il existe plusieurs avantages pour le modèle d’entrée brute :
- Une application n’a pas besoin de détecter ou d’ouvrir l’appareil d’entrée.
- Une application obtient les données directement à partir de l’appareil et traite les données 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 de souris.
- Une application gère le trafic de données en spécifiant des données à partir d’une collection d’appareils ou uniquement de types d’appareils spécifiques.
- 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 dispose de nouvelles commandes dans WM_APPCOMMAND.
Notez que WM_APPCOMMAND fournit 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 et 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 souhaités. Le TLC est défini par une page d’utilisation (la classe de l’appareil) et un ID d’utilisation (l’appareil dans 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 appareils d’entrée brutes sur le système, une application appelle GetRawInputDeviceList. À l’aide de hDevice à partir 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’il souhaite ignorer. Par exemple, une application peut demander une entrée à partir de tous les appareils de téléphonie, à l’exception des machines à réponse. Pour obtenir un exemple de code, consultez Enregistrement pour l’entrée directe.
Notez que la souris et le clavier sont également des HID, de sorte que les données provenant d’eux peuvent passer à la fois par le message HID WM_INPUT et par les messages traditionnels. Une application peut sélectionner l’une ou l’autre méthode en sélectionnant correctement les indicateurs dans RAWINPUTDEVICE.
Pour obtenir l’état d’inscription d’une application, appelez GetRegisteredRawInputDevices à tout moment.
Lecture d’une entrée brute
Une application reçoit une entrée brute de n’importe quel HID dont la collection de niveau supérieur (TLC) correspond à un TLC de l’enregistrement. Lorsqu’une application reçoit une entrée brute, sa file d’attente de messages obtient un message WM_INPUT et l’indicateur d’état de la 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 lorsqu’elles se trouvent en arrière-plan (si elles sont inscrites auprès de RIDEV_INPUTSINK).
Il existe deux façons de lire les données brutes : la méthode standard et la méthode mise en mémoire tampon.
La méthode standard lit une structure RAWINPUT à la fois et convient à la plupart des appareils. L’application appelle GetMessage pour récupérer le message WM_INPUT , puis appelle GetRawInputData avec le handle HRAWINPUT transmis dans lParam. Pour obtenir un exemple, consultez Exécution d’une lecture standard d’entrée brute.
La méthode en mémoire tampon lit un tableau de structures RAWINPUT à la fois et est utile pour les appareils à haute fréquence tels que les souris à 1000Hz, où plusieurs événements peuvent s'accumuler entre les itérations de boucle de message. L’application appelle GetRawInputBuffer pour vider tous les événements accumulés dans un seul lot. Utilisez la macro NEXTRAWINPUTBLOCK pour parcourir le tableau obtenu.
Important
GetMessage supprime la WM_INPUT actuelle de la file d’attente d’entrée brute avant de retourner. Par conséquent, GetRawInputBuffer ne verra pas l’événement actuel : seuls les événements arrivés après celui-ci. Lors de la combinaison des deux méthodes, le modèle correct est :
- Appelez GetRawInputData avec le handle lParam pour lire l’événement actuel.
- Appelez GetRawInputBuffer dans une boucle pour vider les événements supplémentaires accumulés dans la file d’attente.
Pour obtenir un exemple, consultez Exécution d’une lecture par lots d’entrée brute.
Pour interpréter l’entrée brute, des informations détaillées sur les HID peuvent être requises. Une application obtient les informations sur l'appareil en appelant GetRawInputDeviceInfo avec l'identifiant de l'appareil. Ce handle peut provenir du lParam de WM_INPUT via GetRawInputData avec RID_HEADER, ou du membre hDevice de RAWINPUTHEADER.