toUnicode 函数 (winuser.h)
将指定的虚拟键代码和键盘状态转换为相应的一个或多个 Unicode 字符。
语法
int ToUnicode(
[in] UINT wVirtKey,
[in] UINT wScanCode,
[in, optional] const BYTE *lpKeyState,
[out] LPWSTR pwszBuff,
[in] int cchBuff,
[in] UINT wFlags
);
参数
[in] wVirtKey
类型: UINT
要转换的虚拟密钥代码。 请参阅虚拟键代码。
[in] wScanCode
类型: UINT
要转换的密钥的硬件 扫描代码 。 如果键已启动,则设置此值的高序位。
[in, optional] 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+数字键盘 组合键。
如果设置了位 2,则键盘状态不会 (Windows 10 版本 1607 及更新)
保留 (到 31 个) 的所有其他位。
返回值
类型: int
函数返回以下值之一。
返回值 | 说明 |
---|---|
|
指定的虚拟键是 (重音符或音调符号) 的 死键 字符。 无论键盘布局如何,都会返回此值,即使已键入多个字符并存储在键盘状态中也是如此。 如果可能,即使使用 Unicode 键盘布局,函数也已将死键字符的间距版本写入 pwszBuff 指定的缓冲区。 例如, 函数写入字符锐音符 (U+00B4) ,而不是字符组合锐音符 (U+0301) 。 |
|
指定的虚拟键没有键盘当前状态的转换。 未向 pwszBuff 指定的缓冲区写入任何内容。 |
|
一个或多个 UTF-16 代码单元已写入 pwszBuff 指定的缓冲区。 返回的 pwszBuff 包含的字符数可能多于返回值指定的字符数。 发生这种情况时,任何额外的字符都无效,应忽略。 |
注解
若要指定用于转换指定代码的键盘布局的句柄,请使用 ToUnicodeEx 函数。
某些键盘布局可能会返回多个字符和/或补充字符作为 pwszBuff 中的代理项对。 如果键盘布局中存储的死键字符 (重音符或音调符号) 不能与指定的虚拟键组合成一个字符,则以前输入的死字符可以与当前字符组合。
提供给 ToUnicodeEx 函数的参数可能不足以转换虚拟键代码,因为以前的 死键 存储在键盘布局中。
通常, ToUnicode 基于虚拟键代码执行转换。 但在某些情况下, wScanCode 参数的第 15 位可用于区分按键和释放键 (例如 alt+numpad 键输入) 。
当 ToUnicode 转换虚拟键代码时,它还会更改内核模式键盘缓冲区的状态。 此状态更改会影响死键、连字、 Alt+数字键盘 键输入等。 如果与 TranslateMessage (结合使用,这也可能导致不需要的副作用,这也会更改内核模式键盘缓冲区) 的状态。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
最低受支持的服务器 | Windows 2000 Server [仅限桌面应用] |
目标平台 | Windows |
标头 | winuser.h (包括 Windows.h) |
Library | User32.lib |
DLL | User32.dll |
请参阅
概念性
引用