다음을 통해 공유


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

키보드(단추) 사용량 목록에 대한 포인터입니다. 변환 사용량 루틴은 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(0)로 설정되어 있는지 여부를 식별합니다.

한정자 상태 구조가 변환 사용 루틴과 함께 사용되는 방법에 대한 자세한 내용은 설명 섹션을 참조하세요.

[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 루틴을 사용하여 해당 검사 코드를 호출자에게 반환합니다. 변환 사용 루틴은 다음 중 하나가 발생할 때까지 목록의 사용량을 계속 매핑합니다. 목록의 사용량 값은 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 호출하여 현재 사용량 목록을 이전 사용량 목록과 비교합니다. 사용 목록 차이 루틴은 중단 사용 목록과 사용 목록 만들기를 반환합니다.
  3. 변환 사용 루틴을 호출하고 ChangedUsageList 를 중단 사용 목록으로 설정하고 KeyAction 을 HidP_KeyboardBreak 및 ModifierState 를 변환 사용 루틴에 대해 처리 코드가 유지하는 구조로 설정합니다. 변환 사용 루틴은 InsertCodesProcedure의 콜백 루틴을 사용하여 중단 검사 코드를 처리 루프로 반환합니다.
  4. 변환 사용 루틴을 호출하고 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