Freigeben über


HidP_TranslateUsagesToI8042ScanCodes-Funktion (hidpi.h)

Die HidP_TranslateUsagesToI8042ScanCodes Routine ordnet eine Liste der HID-Verwendungen auf der HID_USAGE_PAGE_KEYBOARD Nutzungsseite ihren jeweiligen PS/2-Scancodes zu (Scancodesatz 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

Zeigen Sie auf eine Liste der Tastaturverwendungen (Schaltflächen). Die Verwendungsroutine übersetzt interpretiert eine Null als Trennzeichen, das die Verwendungsliste beendet.

[in] UsageListLength

Gibt die maximale Anzahl von Verwendungen in der geänderten Verwendungsliste an.

[in] KeyAction

Identifiziert die Schlüsselrichtung für die angegebene Änderungsverwendungsliste.

typedef enum _HIDP_KEYBOARD_DIRECTION {
    HidP_Keyboard_Break,
    HidP_Keyboard_Make
} HIDP_KEYBOARD_DIRECTION;

HidP_Keyboard_Break

Gibt eine Richtung (Taste nach oben) an. Die geänderte Verwendungsliste enthält die Verwendungen, die auf "AUS" festgelegt wurden, die zuvor auf "EIN" festgelegt wurden (was den zuvor nach unten geschalteten Schlüsseln entspricht, jetzt aber nach oben).

HidPKeyboard_Make

Gibt eine Richtung festlegen (Taste nach unten). Die geänderte Verwendungsliste enthält die Verwendungen, die auf "EIN" festgelegt wurden, die zuvor auf "AUS" festgelegt wurden (was den zuvor aufsteigenden Schlüsseln entspricht, aber jetzt nach unten).

[in, out] ModifierState

Zeigen Sie auf eine _HIDP_KEYBOARD_MODIFIER_STATE Struktur, die der Aufrufer für die Verwendung durch die Verwendungsroutine für übersetzungen verwaltet. Die Modifiziererzustandsstruktur identifiziert den Zustand der Tastaturmodifizierertasten.

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;
};

Jedes Element der Modifiziererstatusstruktur gibt an, ob die entsprechende Verwendung auf EIN (1) oder OFF (Null) festgelegt ist.

Weitere Informationen dazu, wie eine Modifiziererzustandsstruktur mit der Übersetzungsverwendungsroutine verwendet wird, finden Sie im Abschnitt "Hinweise".

[in] InsertCodesProcedure

Zeiger auf eine vom Aufrufer bereitgestellte PHIDP_INSERT_SCANCODES-typierte Rückrufroutine, die von der Übersetzungsverwendungsroutine verwendet wird, 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
    );

Zusammenhang

Zeigen Sie auf den Kontext des Aufrufers der Translate-Verwendungsroutine. Die Translate-Verwendungsroutine übergibt den InsertCodesContext Zeiger an die InsertCodesProcedure Routine.

NewScanCodes

Zeigen Sie auf das erste Byte eines Scancodes, den die Translate-Verwendungsroutine an den Aufrufer der Übersetzungsverwendungsroutine zurückgibt.

Länge

Gibt die Länge des Scancodes in Bytes an. Ein Scancode darf nicht mehr als vier Byte überschreiten.

[in, optional] InsertCodesContext

Zeiger auf einen aufruferdefinierten Kontext, den die Übersetzungsverwendungsroutine an die InsertCodesProcedure Routine übergibt.

Rückgabewert

HidP_TranslateUsagesToI8042ScanCodes gibt einen der folgenden Statuswerte 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.

Bemerkungen

HidP_TranslateUsagesToI8042ScanCodes ordnet die Verwendung der Tastaturschaltflächen in der Geänderten Verwendungsliste in der Reihenfolge, in der sie in der Liste auftreten, beginnend mit dem Wert bei ChangedUsageList zu. Nachdem die Übersetzungsverwendungsroutine eine Verwendung erfolgreich zugeordnet hat, verwendet sie die InsertCodesProcedure-Routine des Aufrufers, um den entsprechenden Scancode an den Aufrufer zurückzugeben. Die Übersetzungsverwendungsroutine zuordnen die Verwendungen in der Liste bis zu einem der folgenden Schritte: Ein Verwendungswert in der Liste ist null; sie ordnet die Anzahl der Verwendungen zu, die durch UsageListLengthangegeben wird; eine Verwendung ist einem ungültigen Tastaturscancode zugeordnet.

HidP_TranslateUsagesToI8042ScanCodes ist in erster Linie für die Verwendung in einer Verarbeitungsschleife konzipiert, die wiederholt die aktuelle Verwendungsliste bestimmt (Verwendungen, die derzeit auf EIN festgelegt sind), vergleichen sie mit einer vorherigen Verwendungsliste (Verwendungen, die zuvor auf EIN festgelegt wurden) und ordnet den Unterschied zwischen den aktuellen und vorherigen Verwendungslisten zu, um Scancodes zu erstellen und Scancodes zu unterbrechen. Die folgenden Vorgänge veranschaulichen die Verwendung der Übersetzungsroutine.

Vor beginn einer Verarbeitungsschleife weist der Verarbeitungscode die folgenden Daten in der Regel zu und initialisiert sie:

  • Eine frühere Verwendungsliste, aktuelle Verwendungsliste, Unterbrechungsverwendungsliste und eine Verwendungsliste.

    Jede Liste ist ein nullinitialisiertes Array von Verwendungen. Um sicherzustellen, dass der Verarbeitungscode alle Verwendungen zuordnet, die zwischen aufeinander folgenden HID-Eingabeberichten geändert werden 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 HID_USAGE_PAGE_KEYBOARD Verwendungsseite zurückgeben können. Diese Zahl wird mit HidP_MaxUsageListLengthabgerufen.

  • Eine nullinitialisierte _HIDP_KEYBOARD_MODIFIER_STATE Struktur für die Verwendung durch die Verwendungsroutine für die Übersetzung.

    In der Verarbeitungsschleife muss der Code diese Struktur für die Verwendung durch die Übersetzungsroutine beibehalten. Der Verarbeitungscode kann den Status der Modifiziererschlüssel lesen, der Code darf die Struktur jedoch nicht ändern. Die Übersetzungsverwendungsroutine verwendet diese Struktur, um interne Informationen zum Status der Modifiziererschlüssel beizubehalten.

Nach der Initialisierung der erforderlichen Strukturen enthält 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 "EIN" 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 Verwendungsliste mit einer vorherigen Verwendungsliste zu vergleichen. Die Verwendungslistendifferenzroutine gibt eine Unterbrechungsverwendungsliste und eine Verwendungsliste zurück.
  3. Rufen Sie die Übersetzungsnutzungsroutine auf, und legen Sie ChangedUsageList- in die Unterbrechungsverwendungsliste fest, KeyAction- auf HidP_KeyboardBreak, und ModifierState der Struktur, die der Verarbeitungscode für die Übersetzungsroutine verwaltet. Die Verwendungsroutine übersetzt verwendet die InsertCodesProcedureRückrufroutine, um die Unterbrechungsscancodes an die Verarbeitungsschleife zurückzugeben.
  4. Rufen Sie die Übersetzungsnutzungsroutine auf, indem Sie ChangedUsageList- auf die Verwendungsliste festlegen, KeyAction- in HidP_KeyboardMake, und ModifierState der Struktur, die der Verarbeitungscode für die Übersetzungsroutine verwaltet. Die Verwendungsroutine übersetzt verwendet die InsertCodesProcedureRückrufroutine, um die Überprüfungscodes an die Verarbeitungsschleife zurückzugeben.
  5. Aktualisieren Sie die vorherige Verwendungsliste auf die aktuelle Verwendungsliste.
Informationen zur Zuordnung zwischen HID-Verwendungen und PS/2-Tastaturscancodes finden Sie in den Tastenunterstützung und Scancodes Website.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Verfügbar in Windows 2000 und höheren Versionen von Windows.
Zielplattform- Universal
Header- hidpi.h (include Hidpi.h)
Library Hidparse.lib
IRQL- <= DISPATCH_LEVEL

Siehe auch

HidP_GetUsages

HidP_MaxUsageListLength

HidP_UsageListDifference