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


функция 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

Указывает направление (вниз). Измененный список использования содержит значения 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. Задайте для параметра 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 (include Hidpi.h)
библиотеки Hidparse.lib
IRQL <= DISPATCH_LEVEL

См. также

HidP_GetUsages

HidP_MaxUsageListLength

HidP_UsageListDifference