有没有办法检查按下的换档是否按下每个输入的控制?

时间:2017-12-06 05:25:36

标签: c++ windows keyboard getch

我正在尝试使用_getch获取键盘笔划以增加游戏中的金钱。如果我希望这些钱能够更快地增加,那么在10年代的时候,在保持向下移动并保持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();
    }
}

如果我添加了一个if,如果控制为100,它将无法正常工作。很可能因为再次运行GetAsyncKeyState函数使其无法正确读取键状态。

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

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

3 个答案:

答案 0 :(得分:0)

“if(GetAsyncKeyState(VK_SHIFT)&amp;&amp; GetAsyncKeyState(VK_CONTROL))”怎么样?您无法使用一个GAKS呼叫来检查多个密钥。

答案 1 :(得分:0)

尝试以下代码以确保您可以一起使用多个密钥。硬件限制同时按下多个按键,因此请记住这一点。

主要呼叫功能,

const test: Foo = {
   [myProp] = myProp
}

功能keydown,

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

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

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

答案 2 :(得分:0)

关闭控件可防止控制台“刷新”。所以,这只是控制本身导致错误的一个问题,我决定使用for-shift持有10年代而while-tab持有100年代。如果有一种方法可以使用alt,我认为没有,我会使用它。这只是我愚蠢的一个典型案例,需要花费3个小时才能发现密钥绑定与cmd提示符相互作用导致问题。