Функция ToAsciiEx транслирует заданный код виртуальной клавиши и состояние клавиатуры в соответствующий символ или символы. Функция переводит код, используя язык ввода данных и физическую раскладку символов на клавиатуре, определяемую идентификатором языка ввода.
Синтаксис
int ToAsciiEx( UINT uVirtKey, UINT uScanCode, PBYTE lpKeyState, LPWORD lpChar, UINT uFlags, HKL dwhkl ); |
Параметры
uVirtKey
[in] Определяет код виртуальной клавиши, который будет оттранслирован.uScanCode
[in] Определяет аппаратный скэн-код клавиши, которая будет оттранслирована. Старший бит этого значения установлен, если клавиша вверху (не нажата).lpKeyState
[in] Указывает на 256-байтовый массив, который содержит текущее состояние клавиатуры. Каждый элемент (байт) в массиве содержит состояние одной из клавиш. Если старший бит байта установлен, клавиша - внизу (нажата).Если установлен младший бит, он указывает на то, что клавиша переключилась. В этой функции важен только бит переключения клавиши CAPS LOCK. Состояние переключения клавиш NUM LOCK и SCROLL LOCK игнорируется.
lpChar
[out] Указывает на буфер, который примет оттранслированный символ или символы.uFlags
[in] Определяет, является ли меню активным. Этот параметр должен быть 1, если меню активно, или иначе он 0.dwhkl
[in] Идентификатор языка ввода, который используется для трансляции данного кода. Этот параметр может быть любым идентификатором языка ввода, предварительно возвращенный функцией LoadKeyboardLayout.Возвращаемые значения
Если заданная клавиша - мертвая клавиша, величина возвращаемого значения отрицательная. Иначе, она - одно из следующих значений:
Значение |
Предназначение |
0 |
Заданная виртуальная клавиша не транслируется для текущего состояния клавиатуры. |
1 |
В буфер был скопирован один символ. |
2 |
Два символа были скопированы в буфер. Это обычно случается тогда, когда символ мертвой клавиши (знак ударения или диакритический знак), сохраненный в раскладке символов на клавиатуре, не может быть скомбинирован с заданной виртуальной клавишей, чтобы сформировать единый символ. |
Замечания
Идентификатор языка ввода данных - более широкое понятие чем раскладка клавиатуры, так как он может также охватывать преобразователь речи в текст, Редактор Метода Ввода (IME) или любую другую форму ввода данных.
Параметров, данных в функции ToAscii, может быть не достаточно, чтобы перевести код виртуальной клавиши, потому что предыдущая мертвая клавиша сохраняется в раскладке символов на клавиатуре.Как правило, ToAscii исполняет трансляцию, опираясь на код виртуальной клавиши. Однако, в некоторых случаях, бит 15 параметра uScanCode может быть использован, чтобы различить между нажатием клавиши и её отпуском. Скэн-код используется для трансляции комбинации клавиш ALT + числовая клавиша.
Хотя NUM LOCK - клавиша - переключатель, которая воздействует на поведение клавиатуры, функция ToAscii игнорирует установку переключателя (младший бит) lpKeyState (VK_NUMLOCK), потому что одного параметра uVirtKey достаточно, чтобы отличить клавиши управления курсором (VK_HOME, VK_INSERT и так далее) от числовых клавиш (VK_DECIMAL, VK_NUMPAD0 - VK_NUMPAD9).
Смотри также
Обзор Ввод данных с клавиатуры, LoadKeyboardLayout, MapVirtualKeyEx, ToUnicodeEx, VkKeyScan
Размещение и совместимость ToAsciiEx |
|
Windows. NET Server |
Да |
Windows XP |
Да |
Windows 2000 |
Да |
Windows NT |
Да версии 4.0 и выше |
Windows Me |
Да |
Windows 98 |
Да |
Windows 95 |
Да |
Используемая библиотека |
User32.lib |
Заголовочный файл |
|
- объявлено в |
Winuser.h |
- включено в |
Windows.h |
Unicode |
Нет |
Замечания по платформе |
Не имеется |