Функция ToUnicode переводит заданный код виртуальной клавиши и состояние клавиатуры в соответствующий символ или символы Unicode.
Чтобы определить дескриптор раскладки клавиатуры, который используется, чтобы транслировать указанный код, используйте функцию ToUnicodeEx.
Синтаксис
int ToUnicode( UINT wVirtKey, UINT wScanCode, const PBYTE lpKeyState, LPWSTR pwszBuff, int cchBuff, UINT wFlags ); |
Параметры
wVirtKey
[in] Определяет код виртуальной клавиши, который будет оттранслирован.wScanCode
[in] Определяет аппаратный скэн-код клавиши, которая будет оттранслирована. Старший бит этого значения установлен, если клавиша вверху (не нажата).lpKeyState
[in] Указывает на 256-байтовый массив, который содержит текущее состояние клавиатуры. Каждый элемент (байт) в массиве содержит состояние одной из клавиш. Если старший бит байта установлен, клавиша - внизу (нажата).pwszBuff
[out] Указатель на буфер, который принимает оттранслированный символ (букву) или символы (буквы) Unicode. Однако, этот буфер может возвратить значение без без нулевого символа в конце даже при том, что имя переменной означает, что она с нуль-терминатором.cchBuff
[in] Определяет размер буфера, указанного параметром pwszBuff, рассчитанный по ширине символов.wFlags
[in] Параметр определяет поведение функции. Бит 0 установлен, если меню активно. Биты от 1 до 31 зарезервированы.Возвращаемые значения
Функция возвращает одно из следующих значений:
Значение |
Предназначение |
- 1 |
Заданная виртуальная клавиша - символ мертвой клавиши (знак ударения или диакритический знак). Это значение возвращается независимо от раскладки символов на клавиатуре, даже тогда, если несколько символов были введены с клавиатуры и сохранены в состоянии клавиатуры. Вполне возможно, что наравне с раскладками символов Уникода на клавиатуре, функция запишет разделенную пробелами версию символа мертвой клавиши в буфер, заданный pwszBuffer. Например, функция запишет символ SPACING ACUTE (0x00B4), а не символ NON_SPACING ACUTE (0x0301). |
0 |
Заданная виртуальная клавиша не транслируется для текущего состояния клавиатуры. Ничего не пишется в буфер, определенный при помощи pwszBuffer |
1 |
В буфер, заданный параметром pwszBuffer был записано дин символ. |
2 или больше |
Два или больше символа были записаны в буфер, заданный pwszBuff. Наиболее общая причина для этого является то, что символ мертвой клавиши (знак ударения или диакритический знак) сохраненный в раскладке символов на клавиатуре не может быть объединен с заданной виртуальной клавишей, чтобы сформировать единый символ. Однако, буфер может содержать больше символов (букв), чем устанавливает возвращаемое значение. Когда это случается, любые дополнительные символы (буквы) недопустимы и должны игнорироваться. |
Замечания
Параметров, данных в функции
ToUnicode, может быть не достаточно, чтобы перевести код виртуальной клавиши, потому что предыдущая мертвая клавиша сохраняется в раскладке символов на клавиатуре.Как правило,
ToUnicode исполняет трансляцию, опираясь на код виртуальной клавиши. Однако в некоторых случаях, бит 15 параметра wScanCode может быть использован, чтобы различить между нажатием клавиши и её отпуском.Смотри также
Обзор Ввод данных с клавиатуры, ToAscii, ToUnicodeEx, VkKeyScan
Размещение и совместимость ToUnicode |
|
Windows. NET Server |
Да |
Windows XP |
Да |
Windows 2000 |
Да |
Windows NT |
Да версии 3.1 и выше |
Windows Me |
Да |
Windows 98 |
Да |
Windows 95 |
Да |
Используемая библиотека |
User32.lib |
Заголовочный файл |
|
- объявлено в |
Winuser.h |
- включено в |
Windows.h |
Unicode |
Нет |
Замечания по платформе |
Не имеется |