HidP_TranslateUsagesToI8042ScanCodes-Funktion (hidpi.h)
Die HidP_TranslateUsagesToI8042ScanCodes Routine ordnet eine Liste der HID-Verwendungen auf der seite HID_USAGE_PAGE_KEYBOARD-Verwendung den jeweiligen PS/2-Scancodes zu (ScanCode Set 1).
Syntax
NTSTATUS HidP_TranslateUsagesToI8042ScanCodes(
[in] PUSAGE ChangedUsageList,
[in] ULONG UsageListLength,
[in] HIDP_KEYBOARD_DIRECTION KeyAction,
[in, out] PHIDP_KEYBOARD_MODIFIER_STATE ModifierState,
[in] PHIDP_INSERT_SCANCODES InsertCodesProcedure,
[in, optional] PVOID InsertCodesContext
);
Parameter
[in] ChangedUsageList
Zeiger auf eine Liste der Tastaturverwendungen (Schaltflächen). Die Übersetzungsverwendungsroutine interpretiert eine Null als Trennzeichen, das die Verwendungsliste beendet.
[in] UsageListLength
Gibt die maximal mögliche Anzahl von Verwendungen in der geänderten Verwendungsliste an.
[in] KeyAction
Gibt die Schlüsselrichtung für die angegebene Änderungsverwendungsliste an.
typedef enum _HIDP_KEYBOARD_DIRECTION {
HidP_Keyboard_Break,
HidP_Keyboard_Make
} HIDP_KEYBOARD_DIRECTION;
HidP_Keyboard_Break
Gibt eine Unterbrechungsrichtung an (Taste nach oben). Die geänderte Verwendungsliste enthält die auf OFF festgelegten Verwendungen, die zuvor auf EIN festgelegt wurden (dies entspricht den Schlüsseln, die zuvor ausgefallen waren, jetzt aber aktiviert sind).
HidPKeyboard_Make
Gibt eine Make-Richtung an (Taste nach unten). Die geänderte Verwendungsliste enthält die auf ON festgelegten Verwendungen, die zuvor auf OFF festgelegt wurden (was den Schlüsseln entspricht, die zuvor up waren, jetzt aber ausgefallen sind).
[in, out] ModifierState
Zeiger auf eine _HIDP_KEYBOARD_MODIFIER_STATE Struktur, die der Aufrufer für die Verwendung durch die Übersetzungsverwendungsroutine verwaltet. Die Statusstruktur des Modifizierers identifiziert den Zustand der Tasten für die Tastaturmodifizierer.
typedef struct _HIDP_KEYBOARD_MODIFIER_STATE {
union {
struct {
ULONG LeftControl: 1;
ULONG LeftShift: 1;
ULONG LeftAlt: 1;
ULONG LeftGUI: 1;
ULONG RightControl: 1;
ULONG RightShift: 1;
ULONG RightAlt: 1;
ULONG RigthGUI: 1;
ULONG CapsLock: 1;
ULONG ScollLock: 1;
ULONG NumLock: 1;
ULONG Reserved: 21;
};
ULONG ul;
};
Jeder Member der Statusstruktur des Modifizierers identifiziert, ob die entsprechende Verwendung auf ON (1) oder OFF (0) festgelegt ist.
Weitere Informationen dazu, wie eine Modifiziererzustandsstruktur mit der Verwendungsroutine zum Übersetzen verwendet wird, finden Sie im Abschnitt Hinweise.
[in] InsertCodesProcedure
Zeiger auf eine vom Aufrufer bereitgestellte PHIDP_INSERT_SCANCODES typisierte Rückrufroutine, die die Translate-Verwendungsroutine verwendet, um die zugeordneten Scancodes an den Aufrufer der Übersetzungsverwendungsroutine zurückzugeben.
typedef BOOLEAN (*PHIDP_INSERT_SCANCODES)(
IN PVOID Context,
IN PCHAR NewScanCodes,
IN ULONG Length
);
Kontext
Zeiger auf den Kontext des Aufrufers der Translate-Verwendungsroutine. Die Translate-Verwendungsroutine übergibt den InsertCodesContext-Zeiger an die InsertCodesProcedure-Routine .
NewScanCodes
Zeiger auf das erste Byte eines Scancodes, den die Translate-Verwendungsroutine an den Aufrufer der Translate-Verwendungsroutine zurückgibt.
Länge
Gibt die Länge des Scancodes in Bytes an. Ein Scancode darf vier Bytes nicht überschreiten.
[in, optional] InsertCodesContext
Zeiger auf einen vom Aufrufer definierten Kontext, den die Translate-Verwendungsroutine an die InsertCodesProcedure-Routine übergibt.
Rückgabewert
HidP_TranslateUsagesToI8042ScanCodes gibt einen der folgenden status Werte zurück:
Rückgabecode | Beschreibung |
---|---|
|
Die Übersetzungsverwendungsroutine hat alle gültigen Verwendungen in der geänderten Verwendungsliste erfolgreich zugeordnet. |
|
Eine Verwendung in der geänderten Verwendungsliste, die einem ungültigen Tastaturscancode zugeordnet ist. |
Hinweise
HidP_TranslateUsagesToI8042ScanCodes ordnet die Tastaturschaltflächenverwendungen in der geänderten Verwendungsliste sequenziell in der Reihenfolge zu, in der sie in der Liste auftreten, beginnend mit dem Wert unter ChangedUsageList. Nachdem die Verwendungsroutine zum Übersetzen eine Verwendung erfolgreich zugeordnet hat, verwendet sie die InsertCodesProcedure-Routine des Aufrufers, um den entsprechenden Scancode an den Aufrufer zurückzugeben. Die Verwendungsroutine für die Übersetzung bezieht sich weiterhin auf die Verwendungen in der Liste, bis eine der folgenden Aktionen eintritt: Ein Nutzungswert in der Liste ist 0(0). Es ordnet die Anzahl der Verwendungen zu, die durch UsageListLength angegeben wird; eine Verwendung wird einem ungültigen Tastaturscancode zugeordnet.
HidP_TranslateUsagesToI8042ScanCodes ist in erster Linie für die Verwendung in einer Verarbeitungsschleife konzipiert, die wiederholt die aktuelle Nutzungsliste bestimmt (Verwendungen, die derzeit auf ON festgelegt sind), sie mit einer vorherigen Verwendungsliste (Verwendungen, die zuvor auf ON festgelegt wurden) vergleicht und den Unterschied zwischen den aktuellen und vorherigen Verwendungslisten ordnet, um Scancodes und Unterbrechungsscancodes zu erstellen. Die folgenden Vorgänge veranschaulichen die Verwendung der Routine für übersetzungsverwendungen.
Vor Beginn einer Verarbeitungsschleife werden im Verarbeitungscode in der Regel die folgenden Daten zugeordnet und initialisiert:
-
Eine vorherige Verwendungsliste, eine aktuelle Nutzungsliste, eine Unterbrechungsverwendungsliste und eine Make-Nutzungsliste.
Jede Liste ist ein nullinitialisiertes Array von Verwendungen. Um sicherzustellen, dass der Verarbeitungscode alle Verwendungen ordnet, die sich zwischen aufeinanderfolgenden HID-Eingabeberichten ändern können, muss der Verarbeitungscode die Anzahl der Elemente in jeder Liste auf die maximale Anzahl von Verwendungen festlegen, die HidP_GetUsages für die seite HID_USAGE_PAGE_KEYBOARD Verwendung zurückgeben können. Diese Nummer wird mithilfe von HidP_MaxUsageListLength abgerufen.
-
Eine nullinitialisierte _HIDP_KEYBOARD_MODIFIER_STATE-Struktur zur Verwendung durch die Übersetzungsverwendungsroutine.
In der Verarbeitungsschleife muss der Code diese Struktur für die Verwendung durch die Übersetzungsverwendungsroutine beibehalten. Der Verarbeitungscode kann den Status der Modifiziererschlüssel lesen, aber der Code darf die Struktur nicht ändern. Die Translate-Verwendungsroutine verwendet diese Struktur, um interne Informationen zum Status der Modifiziererschlüssel zu verwalten.
- Rufen Sie HidP_GetUsages auf, um die aktuelle Verwendungsliste der Verwendungen abzurufen, die auf ON festgelegt sind. Legen Sie den UsagePage-Eingabeparameter der Get usages-Routine auf HID_USAGE_PAGE_KEYBOARD fest.
- Rufen Sie HidP_UsageListDifference auf, um die aktuelle Nutzungsliste mit einer vorherigen Verwendungsliste zu vergleichen. Die Routine für die Verwendungsliste gibt eine Unterbrechungsverwendungsliste und eine Make-Nutzungsliste zurück.
- Rufen Sie die Translate-Verwendungsroutine auf, und legen Sie ChangedUsageList auf die Unterbrechungsverwendungsliste, KeyAction auf HidP_KeyboardBreak und ModifierState auf die Struktur fest, die der Verarbeitungscode für die Übersetzungsverwendungsroutine verwaltet. Die Translate-Verwendungsroutine verwendet die Rückrufroutine InsertCodesProcedures, um die Codes für die Unterbrechungsüberprüfung an die Verarbeitungsschleife zurückzugeben.
- Rufen Sie die Translate-Verwendungsroutine auf, und legen Sie ChangedUsageList auf die Verwendungsliste make, KeyAction auf HidP_KeyboardMake und ModifierState auf die Struktur fest, die der Verarbeitungscode für die Übersetzungsverwendungsroutine verwaltet. Die Translate-Verwendungsroutine verwendet die Rückrufroutine InsertCodesProcedures, um die Make-Scancodes an die Verarbeitungsschleife zurückzugeben.
- Aktualisieren Sie die vorherige Verwendungsliste in die aktuelle Nutzungsliste.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Verfügbar in Windows 2000 und höheren Versionen von Windows. |
Zielplattform | Universell |
Header | hidpi.h (hidpi.h einschließen) |
Bibliothek | Hidparse.lib |
IRQL | <= DISPATCH_LEVEL |