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

Context

翻譯使用常式之呼叫端內容的指標。 翻譯使用常式會將 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 輸入參數設定為 HID_USAGE_PAGE_KEYBOARD。
  2. 呼叫 HidP_UsageListDifference ,以比較目前使用量清單與先前的使用清單。 使用量清單差異常式會傳回中斷使用清單和製作使用量清單。
  3. 呼叫翻譯使用常式、將 ChangedUsageList 設定為中斷使用量清單、 將 KeyAction 設定為 HidP_KeyboardBreak,並將 ModifierState 設定為處理常式代碼針對翻譯使用常式維護的結構。 翻譯使用常式會使用 InsertCodesProcedure回呼常式,將中斷掃描碼傳回至處理迴圈。
  4. 呼叫 translate usage 常式,將 ChangedUsageList 設定為 [製作使用清單]、將 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