共用方式為


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

鍵盤(按鈕)使用方式清單的指標。 翻譯的使用方式例程會將零解譯為結束使用清單的分隔符。

[in] UsageListLength

指定變更使用量清單中的可能使用量數目上限。

[in] KeyAction

識別指定變更使用方式清單的主要方向。

typedef enum _HIDP_KEYBOARD_DIRECTION {
    HidP_Keyboard_Break,
    HidP_Keyboard_Make
} HIDP_KEYBOARD_DIRECTION;

HidP_Keyboard_Break

指定 中斷 方向 (鍵向上鍵)。 已變更的使用清單包含設定為 OFF 的使用量,這些使用量先前設定為 ON(對應至先前關閉但現在已關閉的索引鍵)。

HidPKeyboard_Make

指定 方向(向下鍵)。 已變更的使用清單包含設定為 ON 的使用量,先前設定為 OFF(這對應於先前啟動但現在已關閉的索引鍵)。

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

上下文

翻譯使用例程之呼叫端內容的指標。 翻譯的使用例程會將 InsertCodesContext 指標傳遞至 InsertCodesProcedure 例程。

NewScanCodes

轉譯使用例程傳回給翻譯使用例程呼叫端之掃描程序代碼的第一個字節指標。

長度

指定掃描碼的長度,以位元組為單位。 掃描碼不能超過四個字節。

[in, optional] InsertCodesContext

轉譯使用例程傳遞至 InsertCodesProcedure 例程的呼叫端定義內容指標。

傳回值

HidP_TranslateUsagesToI8042ScanCodes 會傳回下列其中一個狀態值:

傳回碼 描述
HIDP_STATUS_SUCCESS
翻譯使用例程已成功對應變更使用量清單中的所有有效使用量。
HIDP_STATUS_I8042_TRANS_UNKNOWN
已變更使用量清單中的使用量,對應至無效的鍵盤掃描程序代碼。

言論

HidP_TranslateUsagesToI8042ScanCodes 會循序對應變更的使用方式清單中的鍵盤按鈕使用方式,其順序會從 ChangedUsageList 的值開始。 翻譯使用例程成功對應使用方式之後,它會使用呼叫者的 InsertCodesProcedure 例程,將對應的掃描程式代碼傳回給呼叫端。 轉譯的使用例程會繼續對應清單中的使用量,直到發生下列其中一項:清單中的使用量值為零;它會對應 UsageListLength所指定的使用量數目;使用方式會對應至無效的鍵盤掃描程序代碼。

HidP_TranslateUsagesToI8042ScanCodes 主要是設計成用於處理迴圈中,該循環會重複判斷目前的使用清單(目前設定為 ON 的使用方式)、將它們與先前的使用清單(先前設定為 ON 的使用方式)進行比較,並對應目前和先前的使用清單之間的差異,以建立掃描碼和中斷掃描碼。 下列作業說明如何使用翻譯使用例程。

在開始處理迴圈之前,處理程式碼通常會配置並初始化下列數據:

  • 先前的使用清單、目前的使用量清單、中斷使用量清單,以及進行使用量清單。

    每個清單都是使用方式的零初始化陣列。 為了確保處理程式代碼會對應可在連續 HID 輸入報告之間變更的所有使用方式,處理程式代碼必須將每個清單中的元素數目設定為 HidP_GetUsages 可以針對HID_USAGE_PAGE_KEYBOARD使用量頁面傳回的最大使用量數目。 這個數位是使用 HidP_MaxUsageListLength取得。

  • 以零初始化的_HIDP_KEYBOARD_MODIFIER_STATE結構,供翻譯使用例程使用。

    在處理迴圈中,程式代碼必須維護此結構,以供翻譯使用例程使用。 處理程式代碼可以讀取修飾詞索引鍵的狀態,但程式代碼不得修改 結構。 翻譯的使用例程會使用此結構來維護修飾詞索引鍵狀態的內部資訊。

初始化必要的結構之後,處理迴圈的每個反覆專案通常包含下列作業順序:
  1. 呼叫 HidP_GetUsages,以取得設定為 ON 的目前使用量清單。 將 get usages 例程的 UsagePage input 參數設定為 HID_USAGE_PAGE_KEYBOARD。
  2. 呼叫 HidP_UsageListDifference,將目前使用量清單與先前的使用清單進行比較。 使用量清單差異例程會傳回中斷使用量清單和製作使用量清單。
  3. 呼叫 translate usage 例程、將 ChangedUsageList 設定為中斷使用清單、KeyAction 為 HidP_KeyboardBreak,以及將 ModifierState ModifierState 設定為翻譯使用例程所維護的結構。 翻譯使用例程使用 InsertCodesProcedure回呼例程,將中斷掃描碼傳回處理迴圈。
  4. 呼叫 translate usage 例程、將 ChangedUsageList 設定為 make usage list、KeyAction 為 HidP_KeyboardMake,以及將 ModifierState 為翻譯使用例程所維護的結構。 翻譯使用例程使用 InsertCodesProcedure回呼例程,將進行掃描碼傳回處理迴圈。
  5. 將先前的使用方式清單更新為目前的使用量清單。
如需 HID 使用方式與 PS/2 鍵盤掃描碼之間的對應資訊,請參閱網站 密鑰支援和掃描 碼。

要求

要求 價值
最低支援的用戶端 適用於 Windows 2000 和更新版本的 Windows。
目標平臺 普遍
標頭 hidpi.h (包括 Hidpi.h)
連結庫 Hidparse.lib
IRQL <= DISPATCH_LEVEL

另請參閱

HidP_GetUsages

HidP_MaxUsageListLength

HidP_UsageListDifference