在Windows上,我们如何将虚拟键码转换为移位字符?

时间:2010-10-05 13:39:36

标签: c++ windows winapi

我查看了MapVirtualKey()和ToAscii()。

MapVirtualKey()只给我一个未移位的角色。 ToAscii()仅适用于转换为ASCII值的vk代码。

我需要检测例如“Ctrl + Shift + 3”作为Ctrl激活,Shift激活和'#'。

任何线索?

2 个答案:

答案 0 :(得分:3)

这就是我最终做到的:

case WM_KEYDOWN:
        GetKeyboardState(kbs);
        if(kbs[VK_CONTROL] & 0x00000080)
        {
            kbs[VK_CONTROL] &= 0x0000007f;
            ::ToAscii(p_wParam, ::MapVirtualKey(p_wParam, MAPVK_VK_TO_VSC), kbs, ch, 0);
            kbs[VK_CONTROL] |= 0x00000080;
        }
        else
            ::ToAscii(p_wParam, ::MapVirtualKey(p_wParam, MAPVK_VK_TO_VSC), kbs, ch, 0);

然后我从kbs []获得所有修饰键的状态。

答案 1 :(得分:2)

您可以使用GetKeyState()通过提供虚拟密钥代码来确定密钥状态。另见:GetKeyboardState()