HidP_TranslateUsagesToI8042ScanCodes Funktion (hidpi.h)

Die HidP_TranslateUsagesToI8042ScanCodes Routine ordnet eine Liste der HID-Verwendungen auf der HID_USAGE_PAGE_KEYBOARD-Verwendungsseite ihren 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 Tastaturnutzungen (Schaltflächen). Die Übersetzungsroutine interpretiert eine Null als Trennzeichen, die die Verwendungsliste beendet.

[in] UsageListLength

Gibt die maximale anzahl der 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 Unterbrechungsrichtung (Nach oben) an. Die geänderte Verwendungsliste enthält die Verwendungen, die auf "AUS" festgelegt wurden, die zuvor auf "EIN" festgelegt wurden (was den schlüsseln entspricht, die zuvor unten waren, aber jetzt nach oben sind).

HidPKeyboard_Make

Gibt eine Make-Richtung an (Taste nach unten). Die geänderte Verwendungsliste enthält die verwendungen, die auf "ON" festgelegt wurden, die zuvor auf "OFF" festgelegt wurden (was den zuvor oben genannten Schlüsseln entspricht, aber jetzt unten sind).

[in, out] ModifierState

Zeiger auf eine _HIDP_KEYBOARD_MODIFIER_STATE Struktur, die der Aufrufer für die Verwendung durch die Übersetzungsroutine verwaltet. Die Modifiziererstatusstruktur identifiziert den Status 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;
};

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

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

[in] InsertCodesProcedure

Zeiger auf eine vom Anrufer bereitgestellte PHIDP_INSERT_SCANCODES-typierte Rückrufroutine, die die Übersetzungsverwendungsroutine 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

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

NewScanCodes

Zeigen Sie auf das erste Byte eines Scancodes, den die Übersetzungsverwendungsroutine an den Aufrufer der Übersetzungsverwendungsroutine 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 benutzerdefinierten 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 Tastenschaltfläche in der geänderten Verwendungsliste in der Reihenfolge an, in der sie in der Liste auftreten, beginnend mit dem Wert bei ChangedUsageList. 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 weiterhin die Verwendungen in der Liste, bis eine der folgenden Auftritte auftritt: Ein Verwendungswert in der Liste ist null; es ordnet die Anzahl der Verwendungen zu, die von UsageListLength angegeben werden; 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), vergleicht 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 dem Beginn einer Verarbeitungsschleife ordnet der Verarbeitungscode in der Regel die folgenden Daten zu und initialisiert diese:

  • Eine vorherige Verwendungsliste, aktuelle Verwendungsliste, Unterbrechungsverwendungsliste und eine Verwendungsliste.

    Jede Liste ist ein null initialisiertes Array von Verwendungen. Um sicherzustellen, dass der Verarbeitungscode alle Verwendungen zugeordnet, 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 mithilfe von HidP_MaxUsageListLength abgerufen.

  • Eine null initialisierte _HIDP_KEYBOARD_MODIFIER_STATE Struktur für die Verwendung durch die Übersetzungsroutine.

    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, aber der Code darf die Struktur 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 normalerweise die folgende Abfolge von Vorgängen:
  1. Rufen Sie HidP_GetUsages auf, um die aktuelle Verwendungsliste von Verwendungen abzurufen, die auf "ON" festgelegt sind. Legen Sie den Eingabeparameter "UsagePage " der Get-Verwendungsroutine auf HID_USAGE_PAGE_KEYBOARD fest.
  2. Rufen Sie HidP_UsageListDifference auf, um die aktuelle Verwendungsliste mit einer vorherigen Verwendungsliste zu vergleichen. Die Verwendungslistenunterschiedsroutine gibt eine Unterbrechungsverwendungsliste und eine Verwendungsliste zurück.
  3. Rufen Sie die Übersetzungsverwendungsroutine auf, indem Sie ChangedUsageList auf die Unterbrechungsverwendungsliste, KeyAction auf HidP_KeyboardBreak und ModifierState auf die Struktur festlegen, die der Verarbeitungscode für die Verwendungsroutine verwaltet. Die Übersetzungsroutine verwendet die InsertCodesProcedure-Rückrufroutine, um die Unterbrechungsscancodes an die Verarbeitungsschleife zurückzugeben.
  4. Rufen Sie die Übersetzungsverwendungsroutine auf, indem Sie "ChangedUsageList " auf die Verwendungsliste festlegen, "KeyAction " auf HidP_KeyboardMake und " ModifierState " auf die Struktur, die der Verarbeitungscode für die Verwendungsroutine verwaltet. Die Verwendungsroutine übersetzt verwendet die InsertCodesProcedure-Rü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 auf der Website zur Unterstützung und Überprüfung von Tasten.

Anforderungen

   
Unterstützte Mindestversion (Client) Verfügbar in Windows 2000- und höher-Versionen von Windows.
Zielplattform Universell
Header hidpi.h (include Hidpi.h)
Bibliothek Hidparse.lib
IRQL <= DISPATCH_LEVEL

Siehe auch

HidP_GetUsages

HidP_MaxUsageListLength

HidP_UsageListDifference