函数功能:该函数将一虚拟键码翻译(映射)成一扫描码或一字符值,或者将一扫描码翻译成一虚拟键码。
函数原型:UINT MapVirtualKey(UINT uCode,UINT uMapType)
语法UINT WINAPI MapVirtualKey(
_In_ UINT uCode,
_In_ UINT uMapType
);
参数
uCode:定义一个键的扫描码或虚拟键码。该值如何解释依赖于uMapType参数的值。
uMapType:定义将要执行的翻译。该参数的值依赖于uCode参数的值。取值如下:
MAPVK_VK_TO_VSC(0):代表uCode是一虚拟键码且被翻译为一扫描码。若一虚拟键码不区分左右,则返回左键的扫描码。若未进行翻译,则函数返回0。
MAPVK_VSC_TO_VK(1):uCode参数是一个扫描码,被翻译成一个不区分左右键的虚拟键码。如果没有翻译,该函数返回 0。
MAPVK_VK_TO_CHAR(2):uCode参数是一个虚拟键码,在返回值的低位字中被翻译成一个未移位的字符值。通过设置返回值的最高位来指示死键(变音符号)。如果没有翻译,该函数返回 0。
MAPVK_VSC_TO_VK_EX(3):代表uCode为一扫描码且被翻译为区分左右键的虚拟键码。若未进行翻译,则函数返回0。
MAPVK_VK_TO_VSC_EX(4):Windows Vista 及更高版本: uCode参数是一个虚拟键码,并被转换为扫描码。如果是不区分左右键的虚拟键码,则返回左键扫码。如果扫描码是扩展扫描码,则uCode值的高字节可以包含0xe0或0xe1来指定扩展扫描码。如果没有翻译,该函数返回 0。
返回值:返回值可以是一扫描码,或一虚拟键码,或一字符值,这完全依赖于不同的uCode和uMapType的值。若未进行翻译,则函数返回0。
注意事项应用程序可以使用MapVirtualKey将扫描码转换为虚拟键码常量VK_SHIFT(shift键)、VK_CONTROL(ctrl键)和VK_MENU(alt键),反之亦然。这些翻译不区分 SHIFT、CTRL 或 ALT 键的左右实例。应用程序可以通过调用MapVirtualKey函数时将uCode参数
应用程序可以通过调用MapVirtualKey并将uCode设置为以下虚拟键代码常量之一来获取与这些键之一的左侧或右侧实例对应的扫描代码:
- VK_LSHIFT
- VK_RSHIFT
- VK_LCONTROL
- VK_RCONTROL
- VK_LMENU
- VK_RMENU
应用程序只能通过GetKeyboardState、SetKeyboardState、GetAsyncKeyState、GetKeyState、MapVirtualKey和MapVirtualKeyEx函数使用这些左右区分常量。有关虚拟键码的完整列表,请参阅虚拟键码。
Windows CE:Windows CE仅支持uMapType参数取值为2的情况,即将虚拟键映射为未被移位的字符。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.O及以L版本;头文件:winuser.h;库文件:user32.lib;在Windows NT上实现为Unicode和ANSI两种版本。