ToUnicodeEx 函数 (winuser.h)
将指定的虚拟键代码和键盘状态转换为相应的 Unicode 字符或字符。
语法
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 键盘 组合键。
如果设置了位 1,ToUnicodeEx 将转换标记为键中断事件的扫描码,以及其通常处理密钥生成事件。
如果设置了位 2,则键盘状态不会更改(Windows 10 版本 1607 及更新版本)
所有其他位(到 31 位)均保留。
[in, optional] dwhkl
类型:HKL
用于转换指定代码的输入区域设置标识符。 此参数可以是以前由 LoadKeyboardLayout 函数返回的任何输入区域设置标识符。
返回值
类型:int
该函数返回以下值之一。
返回值 | 描述 |
---|---|
|
指定的虚拟键是 死键 字符(着色或音调)。 无论键盘布局如何,都会返回此值,即使键入了多个字符,并且存储在键盘状态中。 如果可能,即使使用 Unicode 键盘布局,该函数也已将死键字符的间距版本写入到 由 pwszBuff指定的缓冲区。 例如,该函数写入字符 ACUTE ACCENT(U+00B4),而不是字符组合锐音(U+0301)。 |
|
指定的虚拟键没有键盘当前状态的转换。 pwszBuff指定的缓冲区未写入任何内容。 |
|
pwszBuff指定的缓冲区中写入了一个或多个 UTF-16 代码单元。 返回 pwszBuff 可能包含的字符数可能多于返回值指定的字符。 发生这种情况时,任何额外的字符都无效,应忽略。 |
言论
输入区域设置标识符是比键盘布局更广泛的概念,因为它还可以包含语音转文本转换器、输入法编辑器(IME)或任何其他形式的输入。
某些键盘布局可能会返回多个字符和/或补充字符,因为 pwszBuff中的 代理项对。 如果键盘布局中存储的死键字符(口音或音调符号)无法与指定的虚拟键组合,形成单个字符,则可以将上一个输入的死字符与当前字符组合在一起。
提供给 ToUnicodeEx 函数的参数可能不足以转换虚拟键代码,因为以前 死键 存储在键盘布局中。
通常,ToUnicodeEx 基于虚拟密钥代码执行转换。 但在某些情况下,可以使用 wScanCode 参数的位 15 来区分按键和键释放(例如 Alt+numpad 键条目)。
由于 ToUnicodeEx 转换虚拟键代码,它还会更改内核模式键盘缓冲区的状态。 此状态更改会影响死键、连字、Alt+Numeric 键盘 键输入等。 如果与 TranslateMessage 结合使用(这也更改内核模式键盘缓冲区的状态),也可能会导致意外的副作用。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
支持的最低服务器 | Windows 2000 Server [仅限桌面应用] |
目标平台 | 窗户 |
标头 | winuser.h (包括 Windows.h) |
库 | User32.lib |
DLL | User32.dll |
另请参阅
概念
参考