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


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

Возвращаемое значение является одним из следующих значений.

Возвращаемое значение Описание
0
Указанная виртуальная клавиша не имеет перевода текущего состояния клавиатуры.
1
Один символ был скопирован в буфер.
2
В буфер были скопированы два символа. Обычно это происходит, когда неотключаемый символ (диакритический или диакритический символ), хранящийся в раскладке клавиатуры, не может быть составлен с указанной виртуальной клавишей для формирования одного символа.

Комментарии

Параметров, предоставленных функции 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

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

Основные понятия

Ввод с клавиатуры

OemKeyScan

Справочные материалы

ToAsciiEx

ToUnicode

VkKeyScan