C ++&原始输入 - raw-> data.keyboard.VKey == VK_ESCAPE是唯一有效的虚拟键

时间:2016-03-06 20:53:13

标签: c++ raw-input

请注意,我只测试过少数几个,但只有VK_ESCAPE才会有效。

我真正想要的是VK_LWINVK_RWIN,但这些不起作用:VK_CONTROLVK_LCONTROLVK_MENU,{{ 1}}

我不明白为什么这些都不起作用,但VK_F1会起作用。

以下是汇总代码:

VK_ESCAPE

这样做的目的是在用户按下Windows键时执行某些操作,在这种情况下,可以使用某些内容。正在发送一个不同的输入,如ctrl + alt + end(这是我的Launchy热键)。使用AutoHotkey执行此操作对我来说不是一个选项。我在Windows 10上有所作为。

我通常会对游戏和3D软件进行编码,这对我来说都是新的。

1 个答案:

答案 0 :(得分:2)

为此目的,您不需要MapVirtualKey。

我怀疑raw-> data.keyboard.VKey是一个虚拟代码。 VK_LWIN和VK_RWIN是虚拟代码。但它们没有字符表示,因此MapVirtualKey对它们毫无意义。 ESCAPE具有ASCII字符代码,因此它适用于您的情况。

因此,您的代码应该看起来像:

case WM_INPUT:
{
    ...
    unsigned vkCode = raw->data.keyboard.VKey;

    if (Event == WM_KEYUP)
    {
        if (vkCode == VK_LWIN)
        {
            system("start c:\\windows\\notepad.exe"); // For debugging, temporary
        }
    }
    break;