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