Функция ToAscii (winuser.h)
Преобразует указанный код виртуальной клавиши и состояние клавиатуры в соответствующий символ или символы. Функция преобразует код с помощью языка ввода и физической раскладки клавиатуры, определяемой дескриптором раскладки клавиатуры.
Чтобы указать дескриптор раскладки клавиатуры для перевода указанного кода, используйте функцию ToAsciiEx .
Примечание
Этот метод может неправильно работать с некоторыми раскладками клавиатуры , которые могут создавать несколько символов (т. е. лигатуры) и /или дополнительные символы Юникода при одном нажатии клавиши. Настоятельно рекомендуется использовать методы ToUnicode или ToUnicodeEx , которые правильно обрабатывают такие случаи.
Синтаксис
int ToAscii(
[in] UINT uVirtKey,
[in] UINT uScanCode,
[in, optional] const BYTE *lpKeyState,
[out] LPWORD lpChar,
[in] UINT uFlags
);
Параметры
[in] uVirtKey
Тип: UINT
Код виртуального ключа для перевода. См . раздел Коды виртуальных ключей.
[in] uScanCode
Тип: UINT
Код аппаратного сканирования ключа для преобразования. Бит высокого порядка этого значения устанавливается, если клавиша находится вверх (не нажата).
[in, optional] lpKeyState
Тип: const BYTE*
Указатель на 256-байтовой массив, содержащий текущее состояние клавиатуры. Каждый элемент (байт) в массиве содержит состояние одного ключа. Если задан бит байта высокого порядка, клавиша опускается (нажата).
Низкий бит, если он задан, указывает, что ключ включен. В этой функции имеет значение только бит переключателя клавиши CAPS LOCK. Состояние переключателя клавиш NUM LOCK и SCROLL LOCK игнорируется.
[out] lpChar
Тип: LPWORD
Указатель на буфер, который получает переведенный символ (или два символа, упакованные в одно значение WORD , где байт нижнего порядка содержит первый символ, а байт высокого порядка содержит второй символ).
[in] uFlags
Тип: UINT
Этот параметр должен иметь значение 1, если меню активно, или 0 в противном случае.
Возвращаемое значение
Тип: int
Возвращаемое значение является одним из следующих значений.
Возвращаемое значение | Описание |
---|---|
|
Указанная виртуальная клавиша не имеет перевода текущего состояния клавиатуры. |
|
Один символ был скопирован в буфер. |
|
В буфер были скопированы два символа. Обычно это происходит, когда неотключаемый символ (диакритический или диакритический символ), хранящийся в раскладке клавиатуры, не может быть составлен с указанной виртуальной клавишей для формирования одного символа. |
Комментарии
Параметров, предоставленных функции ToAscii , может быть недостаточно для преобразования кода виртуальной клавиши, так как предыдущая неактивная клавиша хранится в раскладке клавиатуры.
Как правило, ToAscii выполняет преобразование на основе кода виртуального ключа. Однако в некоторых случаях бит 15 параметра uScanCode можно использовать для различения нажатия клавиши и выпуска клавиши. Код сканирования используется для перевода сочетаний клавиш ALT+ числовой клавиши .
Хотя NUM LOCK является выключателем, влияющим на поведение клавиатуры, ToAscii игнорирует параметр переключателя (низкий бит) lpKeyState (VK_NUMLOCK), так как только параметра uVirtKey достаточно, чтобы отличать клавиши перемещения курсора (VK_HOME, VK_INSERT и т. д.) от числовых клавиш (VK_DECIMAL, VK_NUMPAD0 - VK_NUMPAD9).
Требования
Минимальная версия клиента | Windows 2000 Professional [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Целевая платформа | Windows |
Header | winuser.h (включая Windows.h) |
Библиотека | User32.lib |
DLL | User32.dll |
См. также раздел
Основные понятия
Справочные материалы