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

函数返回以下值之一。

返回值 说明
value< 0
指定的虚拟键是 (重音符或音调符号) 的 死键 字符。 无论键盘布局如何,都会返回此值,即使已键入多个字符并存储在键盘状态中也是如此。 如果可能,即使使用 Unicode 键盘布局,函数也已将死键字符的间距版本写入 pwszBuff 指定的缓冲区。 例如, 函数写入字符锐音符 (U+00B4) ,而不是字符组合锐音符 (U+0301) 。
0
指定的虚拟键没有键盘当前状态的转换。 未向 pwszBuff 指定的缓冲区写入任何内容。
value > 0
一个或多个 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

请参阅

概念性

键盘输入

引用

ToAscii

ToUnicodeEx

VkKeyScan