Поделиться через


функция HidP_TranslateUsagesToI8042ScanCodes (hidpi.h)

Подпрограмма HidP_TranslateUsagesToI8042ScanCodes сопоставляет список использования HID на странице использования HID_USAGE_PAGE_KEYBOARD с соответствующими кодами сканирования 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

Указывает направление 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
    );

Контекст

Указатель на контекст вызывающего объекта подпрограммы использования преобразования. Подпрограмма использования translate передает указатель 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), а также сопоставляет разницу между текущим и предыдущим списками использования для создания кодов сканирования и прерывания проверки. В следующих операциях показано, как использовать подпрограмму преобразования использования.

Перед началом цикла обработки код обработки обычно выделяет и инициализирует следующие данные:

  • Предыдущий список использования, список текущего использования, список остановов использования и список использования make.

    Каждый список представляет собой инициализированный с нуля массив использования. Чтобы код обработки сопоставлял все виды использования, которые могут изменяться между последовательными входными отчетами HID, код обработки должен задать максимальное количество элементов в каждом списке, которое HidP_GetUsages может возвращать для страницы использования HID_USAGE_PAGE_KEYBOARD. Это число получается с помощью HidP_MaxUsageListLength.

  • Инициализированная с нуля структура _HIDP_KEYBOARD_MODIFIER_STATE для использования подпрограммой преобразования использования.

    В цикле обработки код должен поддерживать эту структуру для использования подпрограммой преобразования использования. Код обработки может считывать состояние ключей модификаторов, но код не должен изменять структуру. Подпрограмма использования преобразования использует эту структуру для хранения внутренних сведений о состоянии ключей модификаторов.

После инициализации необходимых структур каждая итерация цикла обработки обычно включает следующую последовательность операций:
  1. Вызовите HidP_GetUsages , чтобы получить текущий список использования, для которых задано значение ON. Задайте для входного параметра UsagePage подпрограммы получения сведений об использовании значение HID_USAGE_PAGE_KEYBOARD.
  2. Вызовите HidP_UsageListDifference , чтобы сравнить текущий список использования с предыдущим списком использования. Подпрограмма различия в списке использования возвращает список использования прерываний и список использования make.
  3. Вызовите подпрограмму преобразования использования, задав для параметра ChangedUsageList список использования прерываний, Для KeyAction — значение HidP_KeyboardBreak и ModifierState для структуры, которую код обработки поддерживает для подпрограммы перевода использования. Подпрограмма преобразования использования использует процедуру обратного вызова InsertCodesProcedureдля возврата кодов сканирования останова в цикл обработки.
  4. Вызовите подпрограмму преобразования использования, задав для параметра ChangedUsageList значение списка make usage, KeyAction для HidP_KeyboardMake и ModifierState для структуры, которую код обработки поддерживает для подпрограммы перевода использования. Подпрограмма преобразования использования использует процедуру обратного вызова InsertCodesProcedureдля возврата кодов проверки make в цикл обработки.
  5. Обновите предыдущий список использования до текущего списка использования.
Сведения о сопоставлении между использованием HID и кодами сканирования клавиатуры PS/2 см. на веб-сайте поддержки ключей и кодов сканирования .

Требования

Требование Значение
Минимальная версия клиента Доступно в Windows 2000 и более поздних версиях Windows.
Целевая платформа Универсальное
Верхняя часть hidpi.h (включая Hidpi.h)
Библиотека Hidparse.lib
IRQL <= DISPATCH_LEVEL

См. также раздел

HidP_GetUsages

HidP_MaxUsageListLength

HidP_UsageListDifference