Функция ToUnicodeEx


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

Нет

Замечания по платформе

Не имеется

 

Назад в оглавление
На главную страницу
На оглавление справки

Hosted by uCoz