Freigeben über


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
HIDP_STATUS_SUCCESS
Die Übersetzungsverwendungsroutine hat alle gültigen Verwendungen in der geänderten Verwendungsliste erfolgreich zugeordnet.
HIDP_STATUS_I8042_TRANS_UNKNOWN
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.

Nach dem Initialisieren der erforderlichen Strukturen umfasst jede Iteration der Verarbeitungsschleife in der Regel die folgende Abfolge von Vorgängen:
  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. Aktualisieren Sie die vorherige Verwendungsliste in die aktuelle Nutzungsliste.
Informationen zur Zuordnung zwischen HID-Verwendungen und PS/2-Tastaturscancodes finden Sie auf der Website zur Unterstützung von Schlüsseln und Scancodes .

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

Weitere Informationen

HidP_GetUsages

HidP_MaxUsageListLength

HidP_UsageListDifference