функция 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_TranslateUsagesToI8042ScanCodes последовательно сопоставляет использование кнопки клавиатуры в измененном списке использования в порядке, в котором они происходят в списке, начиная со значения ChangedUsageList. После успешного сопоставления процедуры перевода используется insertCodesProcedure вызывающего средства, чтобы вернуть соответствующий код сканирования вызывающему объекту. Подпрограмма использования перевода продолжает сопоставлять использование в списке до тех пор, пока не произойдет одно из следующих действий: значение использования в списке равно нулю; он сопоставляет количество использования, указанное UsageListLength; Использование сопоставляется с недопустимым кодом сканирования клавиатуры.
HidP_TranslateUsagesToI8042ScanCodes предназначен в основном для использования в цикле обработки, который неоднократно определяет текущий список использования (используемые в настоящее время для on), сравнивает их с предыдущим списком использования (использование, которые ранее были заданы как ON), и сопоставляет разницу между текущими и предыдущими списками использования, чтобы сделать коды сканирования и коды сканирования останова. В следующих операциях показано, как использовать подпрограмму преобразования использования.
Перед началом цикла обработки код обработки обычно выделяет и инициализирует следующие данные:
-
Предыдущий список использования, текущий список использования, список остановов и список использования.
Каждый список — это нулевой инициализированный массив использования. Чтобы код обработки сопоставлял все виды использования, которые могут изменяться между последовательными входными отчетами HID, код обработки должен задать количество элементов в каждом списке максимальное количество использования, которые HidP_GetUsages могут возвращать для страницы использования HID_USAGE_PAGE_KEYBOARD. Это число получается с помощью HidP_MaxUsageListLength.
-
Ноль инициализированная структура _HIDP_KEYBOARD_MODIFIER_STATE для использования подпрограммой преобразования использования.
В цикле обработки код должен поддерживать эту структуру для использования подпрограммой преобразования использования. Код обработки может считывать состояние ключей модификатора, но код не должен изменять структуру. Подпрограмма использования перевода использует эту структуру для поддержания внутренней информации о состоянии ключей модификатора.
- Вызовите HidP_GetUsages, чтобы получить текущий список использования, для которых задано значение ON. Задайте для параметра UsagePage входной параметр процедуры получения HID_USAGE_PAGE_KEYBOARD использования.
- Вызовите HidP_UsageListDifference для сравнения текущего списка использования использования с предыдущим списком использования. Подпрограмма разницы в списке использования возвращает список остановов и список использования.
- Вызовите подпрограмму использования перевода, задав ChangedUsageList список использования, KeyAction значение HidP_KeyboardBreak и ModifierState структуру, которую код обработки поддерживает для подпрограммы перевода. Подпрограмма преобразования использует подпрограмму обратного вызова InsertCodesProcedureдля возврата кодов сканирования останова в цикл обработки.
- Вызовите подпрограмму использования перевода, задав ChangedUsageList в список использования, KeyAction для HidP_KeyboardMake и ModifierState структуру, которую код обработки поддерживает для подпрограммы перевода. Подпрограмма преобразования использует подпрограмму обратного вызова InsertCodesProcedureдля возврата кодов сканирования в цикл обработки.
- Обновите предыдущий список использования до текущего списка использования.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Доступно в Windows 2000 и более поздних версиях Windows. |
целевая платформа | Всеобщий |
заголовка | hidpi.h (include Hidpi.h) |
библиотеки | Hidparse.lib |
IRQL | <= DISPATCH_LEVEL |