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


Функция ToUnicodeEx (winuser.h)

Преобразует указанный код виртуального ключа и состояние клавиатуры в соответствующий символ Юникода или символы.

Синтаксис

int ToUnicodeEx(
  [in]           UINT       wVirtKey,
  [in]           UINT       wScanCode,
  [in]           const BYTE *lpKeyState,
  [out]          LPWSTR     pwszBuff,
  [in]           int        cchBuff,
  [in]           UINT       wFlags,
  [in, optional] HKL        dwhkl
);

Параметры

[in] wVirtKey

Тип: UINT

Преобразованный код виртуального ключа. См. Virtual-Key коды.

[in] wScanCode

Тип: UINT

Код проверки аппаратного ключа, который необходимо преобразовать. Если ключ включен, задан высокий порядок этого значения.

[in] lpKeyState

Тип: const BYTE*

Указатель на массив 256 байтов, содержащий текущее состояние клавиатуры. Каждый элемент (байт) в массиве содержит состояние одного ключа.

Если задан бит байта с высоким порядком, ключ будет отключен. Низкий бит, если задано, указывает, что ключ включен. В этой функции имеет значение только переключатель ключа CAPS LOCK. Состояние переключателя клавиш NUM LOCK и SCROLL LOCK игнорируется. Дополнительные сведения см. в GetKeyboardState.

[out] pwszBuff

Тип: LPWSTR

Буфер, получающий преобразованный символ или символы в виде массива единиц кода UTF-16. Этот буфер может быть возвращен, не завершая значение NULL, даже если имя переменной предполагает, что оно завершается значением NULL. Возвращаемое значение этого метода можно использовать для определения количества записанных символов.

[in] cchBuff

Тип: int

Размер буфера в символах, на который указывает параметр pwszBuff.

[in] wFlags

Тип: UINT

Поведение функции.

Если задан бит 0, то меню активно. В этом режиме клавиши ALT+Numeric keypad сочетания клавиш не обрабатываются.

Если задан бит 1, ToUnicodeEx будет переводить коды сканирования, помеченные как события разбиения ключей в дополнение к обычному обработке ключевых событий.

Если установлен бит 2, состояние клавиатуры не изменяется (Windows 10 версии 1607 и более поздней версии)

Все остальные биты (до 31) зарезервированы.

[in, optional] dwhkl

Тип: HKL

Входной идентификатор языкового стандарта, используемый для перевода указанного кода. Этот параметр может быть любым входным идентификатором языкового стандарта, ранее возвращенным функцией LoadKeyboardLayout.

Возвращаемое значение

Тип: int

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

Возвращаемое значение Описание
значение < 0
Указанный виртуальный ключ — это мертвый ключ символ (акцент или диакритический). Это значение возвращается независимо от раскладки клавиатуры, даже если несколько символов были введены и хранятся в состоянии клавиатуры. Если это возможно, даже с раскладками клавиатуры Юникода функция написала версию интервала символа недоставленного ключа в буфер, указанный pwszBuff. Например, функция записывает символ ОСТРОГО АКЦЕНТА (U+00B4), а не символ, СОЧЕТАЮЩИЙ ОСТРЫЙ АКЦЕНТ (U+0301).
0
Указанный виртуальный ключ не имеет перевода для текущего состояния клавиатуры. Ничего не было записано в буфер, указанный pwszBuff.
значение > 0
Один или несколько единиц кода UTF-16 были записаны в буфер, указанный pwszBuff. Возвращенный pwszBuff может содержать больше символов, чем указано возвращаемое значение. В этом случае все дополнительные символы недопустимы и должны игнорироваться.

Замечания

Идентификатор языкового стандарта ввода — это более широкая концепция, чем раскладка клавиатуры, так как она также может охватывать преобразователь речи к тексту, редактор метода ввода (IME) или любую другую форму ввода.

Некоторые макеты клавиатуры могут возвращать несколько символов и (или) дополнительных символов в виде суррогатных пар в pwszBuff. Если символ мертвого ключа (акцент или диакритический), хранящийся в макете клавиатуры, не удалось объединить с указанным виртуальным ключом для формирования одного символа, то предыдущий введенный мертвый символ можно объединить с текущим символом.

Параметры, предоставленные функции ToUnicodeEx, могут быть недостаточно для перевода кода виртуального ключа, так как предыдущий мертвый ключ хранится в макете клавиатуры.

Как правило, ToUnicodeEx выполняет перевод на основе кода виртуального ключа. Однако в некоторых случаях можно использовать бит 15 параметра wScanCode, чтобы различать нажатие клавиши и выпуск ключа (например, для записи клавиш ALT+numpad).

Как ToUnicodeEx преобразует код виртуального ключа, он также изменяет состояние буфера клавиатуры в режиме ядра. Это изменение состояния влияет на мертвые ключи, лигатуры, alt+Numeric keypad запись ключа и т. д. Это также может вызвать нежелательные побочные эффекты, если они используются в сочетании с TranslateMessage (что также изменяет состояние буфера клавиатуры в режиме ядра).

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows 2000 Профессиональный [только классические приложения]
минимальный поддерживаемый сервер Windows 2000 Server [только классические приложения]
целевая платформа Виндоус
заголовка winuser.h (включая Windows.h)
библиотеки User32.lib
DLL User32.dll

См. также

концептуальные

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

LoadKeyboardLayout

Справочник

ToAsciiEx

VkKeyScan