MapVirtualKeyExA 函数 (winuser.h)

将虚拟密钥代码转换为扫描代码或字符值,或将扫描代码转换为虚拟密钥代码。 该函数使用输入语言和输入区域设置标识符翻译代码。

语法

UINT MapVirtualKeyExA(
  [in]                UINT uCode,
  [in]                UINT uMapType,
  [in, out, optional] HKL  dwhkl
);

参数

[in] uCode

类型:UINT

虚拟密钥代码 或扫描密钥的代码。 如何解释此值取决于 uMapType 参数的值。

[in] uMapType

类型:UINT

要执行的翻译。 此参数的值取决于 uCode 参数的值。

价值 意义
MAPVK_VK_TO_VSC
0
uCode 参数是虚拟密钥代码,并转换为扫描代码。 如果它是不区分左键和右键的虚拟键代码,则返回左侧扫描代码。 如果没有转换,该函数将返回 0。
MAPVK_VSC_TO_VK
1
uCode 参数是扫描代码,并转换为虚拟键代码,该代码不区分左键和右键。 如果没有转换,该函数将返回 0。
Windows Vista 及更高版本:uCode 值的高字节可以包含0xe0或0xe1来指定扩展扫描代码。
MAPVK_VK_TO_CHAR
2
uCode 参数是虚拟键代码,在返回值的低序单词中转换为未临时字符值。 死键(音调符号)通过设置返回值顶部位来指示。 如果没有转换,该函数将返回 0。 请参阅“备注”。
MAPVK_VSC_TO_VK_EX
3
uCode 参数是扫描代码,并转换为虚拟键代码,用于区分左键和右键。 如果没有转换,该函数将返回 0。
Windows Vista 及更高版本:uCode 值的高字节可以包含0xe0或0xe1来指定扩展扫描代码。
MAPVK_VK_TO_VSC_EX
4
Windows Vista 及更高版本:uCode 参数是虚拟密钥代码,并转换为扫描代码。 如果它是不区分左键和右键的虚拟键代码,则返回左侧扫描代码。 如果扫描代码是扩展扫描代码,则返回值的高字节将包含0xe0或0xe1来指定扩展扫描代码。 如果没有转换,该函数将返回 0。

[in, out, optional] dwhkl

类型:HKL

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

返回值

类型:UINT

返回值是扫描代码、虚拟键代码或字符值,具体取决于 uCode 的值,uMapType。 如果没有转换,则返回值为零。

言论

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

应用程序可以使用 MapVirtualKeyEx 将扫描代码转换为虚拟密钥代码常量,VK_SHIFTVK_CONTROLVK_MENU,反之亦然。 这些转换不区分 SHIFT、CTRL 或 ALT 键的左右实例。

应用程序可以通过调用 MapVirtualKeyExuCode 设置为以下虚拟键代码常量之一)来获取对应于其中一个键的左侧或右侧实例的扫描代码:

  • VK_LSHIFT
  • VK_RSHIFT
  • VK_LCONTROL
  • VK_RCONTROL
  • VK_LMENU
  • VK_RMENU

这些左和右区分常量仅可通过 GetKeyboardStateSetKeyboardStateGetAsyncKeyStateGetKeyStateMapVirtualKeyMapVirtualKeyEx 函数提供给应用程序。 有关虚拟密钥代码的完整表,请参阅 虚拟密钥代码

MAPVK_VK_TO_CHAR 模式下,虚拟密钥代码“A”。Z' 键转换为大写“A”。。无论当前键盘布局如何,Z' 字符。 如果要将虚拟密钥代码转换为相应的字符,请使用 ToAscii 函数。

注意

winuser.h 标头将 MapVirtualKeyEx 定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的 约定。

要求

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

另请参阅