有没有办法检查每个输入是否按下了 Shift THEN 控件?

Is there a way to check for shift held down THEN control held down for each input?

我正在尝试使用 _getch 获取键盘敲击以增加游戏中的金钱。如果我想让钱增加得更快,在 10 秒内按住 shift 并按住 100 的控制,最好的方法是什么?如果我只是检查班次,这很容易,但是如果我想检查班次,那么之后的控件将不起作用。

例如检查增加 1 或 10 我会做这样的事情

key = _getch();
if (key == 224)
{
    key = _getch();
    if (key == 75) // left arrow
    {
        if (GetAsyncKeyState(VK_SHIFT)
            for (int i = 0; i < 10; i++) // go left 10 times
                    left();
        else
            left();
    }
}

如果我添加一个 else if 来控制 100's,它将不起作用。很可能是因为 运行 GetAsyncKeyState 函数再次导致它无法正确读取密钥状态。

else if (GetAsyncKeyState(VK_CONTROL)
    for (int i = 0; i < 100; i++) // go left 100 times
        left();

任何可能的解决方法?谢谢!

"if(GetAsyncKeyState(VK_SHIFT) && GetAsyncKeyState(VK_CONTROL))"怎么样?您不能使用一个 GAKS 调用来检查多个密钥。

尝试以下代码以确保您可以同时使用多个键。硬件在识别同时按下多个按键方面存在限制,因此请牢记这一点。

主要调用函数,

while(!keydown(VK_LCONTROL))
{
    if(keydown(VK_LCONTROL) && keydown(VK_NUMPAD1) && keydown(VK_UP))
    {
        cout << "combo pressed!" << endl;
    }
    Sleep(10);
}

功能按键,

BOOL keydown(int key)
{
    return (GetAsyncKeyState(key) & 0x8000) != 0;
}

(GetAsyncKeyState(key) & 0x8000) != 0;我们只对第 15 位感兴趣,所以检查一下这个。有关详细信息,请查看相应位的信息。

尝试组合键,例如 control+numberpad1+Up 用于 1 的增量,control+numberpad2+Up 用于 10 的增量等。

原来控制阻止了控制台"flushing"。所以,这只是控制本身导致错误的问题,我决定使用 while-shift 保持 10 秒和 while-tab 保持 100 秒。如果有一种使用 alt 的方法,但我认为没有,我会使用它。这只是我愚蠢的一个典型案例,花了大约 3 个小时才意识到是键绑定与 cmd 提示符交互导致了问题。