toAsciiEx 函数 (winuser.h)

将指定的虚拟键代码和键盘状态转换为相应的一个或多个字符。 该函数使用输入语言和由输入区域设置标识符标识的物理键盘布局转换代码。

注意

此方法可能无法正常使用某些 键盘布局 ,这些布局可能会生成多个字符 (即在一次按键时) 连字和/或补充 Unicode 字符。 强烈建议使用正确处理此类情况的 ToUnicodeToUnicodeEx 方法。

语法

int ToAsciiEx(
  [in]           UINT       uVirtKey,
  [in]           UINT       uScanCode,
  [in, optional] const BYTE *lpKeyState,
  [out]          LPWORD     lpChar,
  [in]           UINT       uFlags,
  [in, optional] HKL        dwhkl
);

参数

[in] uVirtKey

类型: UINT

要转换的虚拟密钥代码。 请参阅虚拟键代码

[in] uScanCode

类型: UINT

要转换的密钥的硬件扫描代码。 如果键处于启动 (未按下) ,则设置此值的高位。

[in, optional] lpKeyState

类型: const BYTE*

指向包含当前键盘状态的 256 字节数组的指针。 数组中 (字节) 的每个元素都包含一个键的状态。 如果设置了字节的高阶位,则 (按下) 键。

低位(如果设置)指示键已打开。 在此函数中,只有 CAPS LOCK 键的切换位是相关的。 忽略 NUM LOCK 和 SCOLL LOCK 键的切换状态。

[out] lpChar

类型: LPWORD

指向缓冲区的指针,该缓冲区接收已翻译字符 (或两个字符打包到单个 WORD 值中,其中低位字节包含第一个字符,高序字节包含第二个字符) 。

[in] uFlags

类型: UINT

如果菜单处于活动状态,则此参数必须为 1,否则为零。

[in, optional] dwhkl

类型: HKL

用于转换代码的输入区域设置标识符。 此参数可以是 以前由 LoadKeyboardLayout 函数返回的任何输入区域设置标识符。

返回值

类型: int

返回值是以下值之一。

返回值 说明
0
指定的虚拟键没有键盘当前状态的转换。
1
已将一个字符复制到缓冲区。
2
已将两个字符复制到缓冲区。 当键盘布局中存储的死键字符 (重音符或音调符号) 不能使用指定的虚拟键组成一个字符时,通常会发生这种情况。

备注

输入区域设置标识符是比键盘布局更广泛的概念,因为它还可以包含语音转文本转换器、输入法编辑器 (输入法) 或任何其他形式的输入。

提供给 ToAsciiEx 函数的参数可能不足以转换虚拟键代码,因为以前的死键存储在键盘布局中。

通常, ToAsciiEx 会根据虚拟键代码执行转换。 但在某些情况下, uScanCode 参数的第 15 位可用于区分按键和释放键。 扫描代码用于转换 ALT+数字组合键。

尽管 NUM LOCK 是影响键盘行为的切换键,但 ToAsciiEx 会忽略 lpKeyState (VK_NUMLOCK) 的低位) (切换设置,因为仅使用 uVirtKey 参数就足以将光标移动键 (VK_HOMEVK_INSERT等) 与数字键 (VK_DECIMAL区分开来, - VK_NUMPAD0VK_NUMPAD9) 。

要求

   
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 winuser.h (包括 Windows.h)
Library User32.lib
DLL User32.dll

请参阅

概念性

键盘输入

LoadKeyboardLayout

MapVirtualKeyEx

引用

ToUnicodeEx

VkKeyScan