Übersicht über die Rohdateneingabe

Neben der herkömmlichen Tastatur und Maus gibt es viele Benutzereingabegeräte. Benutzereingaben können beispielsweise von einem Joystick, einem Touchscreen, einem Mikrofon oder anderen Geräten erfolgen, die eine große Flexibilität bei der Benutzereingabe ermöglichen. Diese Geräte werden zusammen als Human Interface Devices (HIDs) bezeichnet. Die RAW-Eingabe-API bietet eine stabile und robuste Möglichkeit für Anwendungen, rohe Eingaben von jedem HID zu akzeptieren, einschließlich Tastatur und Maus.

Dieser Abschnitt enthält die folgenden Themen:

Rohdateneingabemodell

Bisher generierten Tastatur und Maus in der Regel Eingabedaten. Das System interpretierte die von diesen Geräten stammenden Daten so, dass die gerätespezifischen Details der Rohinformationen eliminiert wurden. Beispielsweise generiert die Tastatur den gerätespezifischen Scancode, aber das System stellt eine Anwendung mit dem virtuellen Schlüsselcode bereit. Der Fenster-Manager hat nicht nur die Details der rohen Eingabe ausgeblendet, er hat jedoch nicht alle neuen HIDs unterstützt. Um Eingaben von den nicht unterstützten HIDs zu erhalten, musste eine Anwendung viele Dinge ausführen: Das Gerät öffnen, den freigegebenen Modus verwalten, das Gerät regelmäßig lesen oder den E/A-Abschlussport einrichten usw. Das Rohdateneingabemodell und die zugehörigen APIs wurden entwickelt, um einfachen Zugriff auf Roheingaben von allen Eingabegeräten, einschließlich Tastatur und Maus, zu ermöglichen.

Das Rohdateneingabemodell unterscheidet sich vom ursprünglichen Windows-Eingabemodell für Tastatur und Maus. Im ursprünglichen Eingabemodell empfängt eine Anwendung geräteunabhängige Eingaben in Form von Nachrichten, die an ihre Fenster gesendet oder gesendet werden, z. B. WM_CHAR, WM_MOUSEMOVE und WM_APPCOMMAND. Im Gegensatz dazu muss eine Anwendung für rohe Eingaben die Geräte registrieren, von der daten abgerufen werden sollen. Außerdem ruft die Anwendung die rohe Eingabe über die WM_INPUT-Nachricht ab.

Es gibt mehrere Vorteile des Rohdateneingabemodells:

  • Eine Anwendung muss das Eingabegerät nicht erkennen oder öffnen.
  • Eine Anwendung ruft die Daten direkt vom Gerät ab und verarbeitet die Daten entsprechend ihren Anforderungen.
  • Eine Anwendung kann die Quelle der Eingabe auch dann unterscheiden, wenn sie vom gleichen Gerätetyp stammt. Beispielsweise zwei Mausgeräte.
  • Eine Anwendung verwaltet den Datenverkehr, indem Daten aus einer Sammlung von Geräten oder nur bestimmten Gerätetypen angegeben werden.
  • HID-Geräte können verwendet werden, sobald sie im Marketplace verfügbar sind, ohne auf neue Nachrichtentypen oder ein aktualisiertes Betriebssystem zu warten, um neue Befehle in WM_APPCOMMAND.

Beachten Sie, dass WM_APPCOMMAND für einige HID-Geräte bereitstellt. Bei WM_APPCOMMAND handelt es sich jedoch um ein geräteunabhängiges Eingabeereignis auf höherer Ebene, während WM_INPUT unformatierte Daten auf niedriger Ebene sendet, die für ein Gerät spezifisch sind.

Registrierung für Rohdateneingaben

Standardmäßig empfängt keine Anwendung rohe Eingaben. Um unformatierte Eingaben von einem Gerät zu empfangen, muss eine Anwendung das Gerät registrieren.

Zum Registrieren von Geräten erstellt eine Anwendung zunächst ein Array von RAWINPUTDEVICE-Strukturen , die die Sammlung der obersten Ebene (Top Level Collection , TLC) für die gewünschten Geräte angeben. Der TLC wird durch eine Nutzungsseite (die Klasse des Geräts) und eine Nutzungs-ID (das Gerät innerhalb der Klasse) definiert. Um beispielsweise den Tastatur-TLC abzurufen, legen Sie UsagePage = 0x01 und UsageID = 0x06 fest. Die Anwendung ruft RegisterRawInputDevices auf, um die Geräte zu registrieren.

Beachten Sie, dass eine Anwendung ein Gerät registrieren kann, das derzeit nicht an das System angefügt ist. Wenn dieses Gerät angefügt ist, sendet der Windows-Manager die Unformatierte Eingabe automatisch an die Anwendung. Um die Liste der Rohdateneingabegeräte auf dem System abzurufen, ruft eine Anwendung GetRawInputDeviceList auf. Mithilfe von hDevice aus diesem Aufruf ruft eine Anwendung GetRawInputDeviceInfo auf, um die Geräteinformationen abzurufen.

Über den dwFlags-Member von RAWINPUTDEVICE kann eine Anwendung die Geräte auswählen, auf die sie lauschen soll, sowie die Geräte, die sie ignorieren möchte. Beispielsweise kann eine Anwendung von allen Telefoniegeräten mit Ausnahme von Anrufbeantwortern eingaben. Beispielcode finden Sie unter Registrieren für Rohdateneingaben.

Beachten Sie, dass Maus und Tastatur ebenfalls HIDs sind, sodass Daten von ihnen sowohl über die HID-Nachricht WM_INPUT als auch über herkömmliche Nachrichten übermittelt werden können. Eine Anwendung kann beide Methoden durch die richtige Auswahl von Flags in RAWINPUTDEVICE auswählen.

Um die Registrierung einer Anwendung status zu erhalten, rufen Sie GetRegisteredRawInputDevices jederzeit auf.

Lesen von Unformatierten Eingaben

Eine Anwendung empfängt rohe Eingaben von einer beliebigen HID, deren Sammlung der obersten Ebene (Top Level Collection , TLC) mit einem TLC aus der Registrierung übereinstimmt. Wenn eine Anwendung unformatierte Eingaben empfängt, erhält ihre Nachrichtenwarteschlange eine WM_INPUT Nachricht, und die Warteschlange status Flag QS_RAWINPUT festgelegt ist (QS_INPUT enthält auch dieses Flag). Eine Anwendung kann Daten empfangen, wenn sie sich im Vordergrund und im Hintergrund befindet.

Es gibt zwei Möglichkeiten, die Rohdaten zu lesen: die ungepufferte (oder Standard)-Methode und die gepufferte Methode. Die ungepufferte Methode ruft die Rohdaten jeweils eine RAWINPUT-Struktur ab und ist für viele HIDs geeignet. Hier ruft die Anwendung GetMessage auf, um die WM_INPUT Nachricht abzurufen. Anschließend ruft die Anwendung GetRawInputData mithilfe des RAWINPUT-Handles auf , das in WM_INPUT enthalten ist. Ein Beispiel finden Sie unter Ausführen eines Standardlesevorgangs für Rohdateneingaben.

Im Gegensatz dazu ruft die gepufferte Methode gleichzeitig ein Array von RAWINPUT-Strukturen ab. Dies wird für Geräte bereitgestellt, die große Mengen an Roheingaben erzeugen können. Bei dieser Methode ruft die Anwendung GetRawInputBuffer auf, um ein Array von RAWINPUT-Strukturen abzurufen. Beachten Sie, dass das NEXTRAWINPUTBLOCK-Makro verwendet wird, um ein Array von RAWINPUT-Strukturen zu durchlaufen. Ein Beispiel finden Sie unter Ausführen eines gepufferten Lesevorgangs von Roheingaben.

Um die Roheingabe zu interpretieren, sind detaillierte Informationen zu den HIDs erforderlich. Eine Anwendung ruft die Geräteinformationen durch Aufrufen von GetRawInputDeviceInfo mit dem Gerätehandle ab. Dieses Handle kann entweder von WM_INPUT oder vom hDevice-Element von RAWINPUTHEADER stammen.

Siehe auch