次の方法で共有


HidP_TranslateUsagesToI8042ScanCodes 関数 (hidpi.h)

HidP_TranslateUsagesToI8042ScanCodes ルーチンは、HID_USAGE_PAGE_KEYBOARD使用状況ページの HID 使用法の一覧を、それぞれの PS/2 スキャン コード (スキャン コード セット 1) にマップします。

構文

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

パラメーター

[in] ChangedUsageList

キーボード (ボタン) の使用法の一覧へのポインター。 translate usages ルーチンは、使用リストを終了する区切り記号として 0 を解釈します。

[in] UsageListLength

変更された使用量一覧で使用できる最大数を指定します。

[in] KeyAction

指定した変更の使用リストのキーの方向を識別します。

typedef enum _HIDP_KEYBOARD_DIRECTION {
    HidP_Keyboard_Break,
    HidP_Keyboard_Make
} HIDP_KEYBOARD_DIRECTION;

HidP_Keyboard_Break

ブレーク方向 (キーアップ) を指定します。 変更された使用状況リストには、以前は ON に設定されていた OFF に設定された使用法が含まれます (これは、以前はダウンしていたが、現在は稼働中のキーに対応します)。

HidPKeyboard_Make

作成方向 (下方向キー) を指定します。 変更された使用リストには、以前は OFF に設定されていた ON に設定された使用法が含まれます (以前はアップしていたが、現在はダウンしているキーに対応します)。

[in, out] ModifierState

呼び出し元が変換使用法ルーチンで使用するために保持する_HIDP_KEYBOARD_MODIFIER_STATE構造体へのポインター。 修飾子の状態構造体は、キーボード修飾子キーの状態を識別します。

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

修飾子状態構造体の各メンバーは、対応する使用法が ON (1) または OFF (ゼロ) に設定されているかどうかを識別します。

変換使用ルーチンで修飾子の状態構造を使用する方法の詳細については、「解説」セクションを参照してください。

[in] InsertCodesProcedure

呼び出し元が指定したPHIDP_INSERT_SCANCODES型指定のコールバック ルーチンへのポインター。このコールバック ルーチンは、変換使用ルーチンの呼び出し元にマップされたスキャン コードを返すために使用します。

typedef BOOLEAN (*PHIDP_INSERT_SCANCODES)(
    IN PVOID  Context,
    IN PCHAR  NewScanCodes,
    IN ULONG  Length
    );

Context

翻訳使用ルーチンの呼び出し元のコンテキストへのポインター。 変換使用ルーチンは、 InsertCodesContext ポインターを InsertCodesProcedure ルーチンに 渡します。

NewScanCodes

翻訳使用ルーチンが変換使用ルーチンの呼び出し元に返すスキャン コードの最初のバイトへのポインター。

長さ

スキャン コードの長さをバイト単位で指定します。 スキャン コードは 4 バイトを超えることはできません。

[in, optional] InsertCodesContext

変換使用ルーチンが InsertCodesProcedure ルーチンに渡す呼び出し元定義コンテキストへのポインター。

戻り値

HidP_TranslateUsagesToI8042ScanCodesは 、次のいずれかの状態値を返します。

リターン コード 説明
HIDP_STATUS_SUCCESS
変換使用ルーチンは、変更された使用リスト内のすべての有効な使用法を正常にマップしました。
HIDP_STATUS_I8042_TRANS_UNKNOWN
無効なキーボード スキャン コードにマップされた、変更された使用状況リスト内の使用状況。

注釈

HidP_TranslateUsagesToI8042ScanCodes 、変更された使用状況リスト内のキーボード ボタンの使用状況が、 ChangedUsageList の値から始まる、一覧で発生した順序で順番にマップされます。変換使用ルーチンは、使用法を正常にマップした後、呼び出し元の InsertCodesProcedure ルーチンを使用して、対応するスキャン コードを呼び出し元に返します。 translate 使用法ルーチンは、次のいずれかが発生するまで、リスト内の使用状況をマップし続けます。リスト内の使用状況値は 0 です。 UsageListLength によって指定された使用量の数がマップされます。使用法が無効なキーボード スキャン コードにマップされます。

HidP_TranslateUsagesToI8042ScanCodes は主に、現在の使用状況リスト (現在 ON に設定されている使用状況) を繰り返し決定し、それらを以前の使用状況リスト (以前は ON に設定されていた使用量) と比較し、現在と以前の使用リストの違いをマップしてスキャン コードを作成し、スキャン コードを分割する処理ループで使用するように設計されています。 次の操作は、変換使用法ルーチンを使用する方法を示しています。

処理ループを開始する前に、処理コードは通常、次のデータを割り当てて初期化します。

  • 以前の使用状況リスト、現在の使用状況リスト、使用リストの中断、および使用リストの作成。

    各リストは、使用法のゼロ初期化配列です。 処理コードで、連続する HID 入力レポート間で変更できるすべての使用法をマップするには、処理コードで、各リスト内の要素の数を、 HID_USAGE_PAGE_KEYBOARD の使用状況ページで返HidP_GetUsages使用の最大数に設定する必要があります。 この数値は、 HidP_MaxUsageListLengthを使用して取得されます。

  • 変換使用法ルーチンで使用するゼロ初期化_HIDP_KEYBOARD_MODIFIER_STATE構造体。

    処理ループでは、コードは変換使用法ルーチンで使用するためにこの構造を維持する必要があります。 処理コードは修飾子キーの状態を読み取ることができますが、コードで構造体を変更することはできません。 変換使用ルーチンでは、この構造体を使用して、修飾子キーの状態に関する内部情報を保持します。

必要な構造体を初期化した後、処理ループの各イテレーションには通常、次の一連の操作が含まれます。
  1. HidP_GetUsagesを呼び出して、ON に設定されている使用状況の現在の使用状況リストを取得します。 get usages ルーチンの UsagePage 入力パラメーターをHID_USAGE_PAGE_KEYBOARDに設定します。
  2. HidP_UsageListDifferenceを呼び出して、使用状況の現在の使用状況リストを以前の使用状況リストと比較します。 使用リストの相違ルーチンは、中断の使用リストと make usage リストを返します。
  3. Translate 使用法ルーチンを呼び出し、 ChangedUsageList を中断使用リストに設定し、 KeyAction をHidP_KeyboardBreakに設定し、 ModifierState を変換使用法ルーチンに対して処理コードが保持する構造体に設定します。 translate usages ルーチンは 、InsertCodesProcedureのコールバック ルーチンを使用して、ブレーク スキャン コードを処理ループに返します。
  4. Translate 使用法ルーチンを呼び出し、 ChangedUsageList を make usage リストに設定し、 KeyAction を HidP_KeyboardMakeに設定し、 ModifierState を変換使用法ルーチンの処理コードが保持する構造体に設定します。 translate usages ルーチンでは、 InsertCodesProcedureのコールバック ルーチンを使用して、make scan コードを処理ループに返します。
  5. 前の使用状況リストを現在の使用状況リストに更新します。
HID 使用法と PS/2 キーボード スキャン コード間のマッピングの詳細については、 主要なサポートとスキャン コード の Web サイトを参照してください。

要件

要件
サポートされている最小のクライアント Windows 2000 以降のバージョンの Windows で使用できます。
対象プラットフォーム ユニバーサル
Header hidpi.h (Hidpi.h を含む)
Library Hidparse.lib
IRQL <= DISPATCH_LEVEL

こちらもご覧ください

HidP_GetUsages

HidP_MaxUsageListLength

HidP_UsageListDifference