MapVirtualKeyA 函数 (winuser.h)

将虚拟键代码转换为(映射到)扫描代码或字符值,或将扫描代码转换为虚拟键代码。

语法

UINT MapVirtualKeyA(
  [in] UINT uCode,
  [in] UINT uMapType
);

参数

[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。

返回值

类型: UINT

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

注解

若要指定用于转换指定代码的键盘布局的句柄,请使用 MapVirtualKeyEx 函数。

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

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

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

这些左右区分常量只能通过 GetKeyboardState、SetKeyboardStateGetAsyncKeyStateGetKeyStateMapVirtualKeyMapVirtualKeyEx 函数提供给应用程序。 有关虚拟密钥代码的完整列表,请参阅 虚拟密钥代码

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

注意

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

要求

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

另请参阅