如何使用GetAsyncKeyState而不多次调用它?

时间:2013-05-22 01:57:34

标签: c++

这就是我的代码目前的样子:

    if (GetAsyncKeyState(VK_CONTROL) && GetAsyncKeyState(0x31)) {
        //...
    }

    if (GetAsyncKeyState(VK_CONTROL) && GetAsyncKeyState(0x32)) {
        //...
    }

    if (GetAsyncKeyState(VK_CONTROL) && GetAsyncKeyState(0x33)) {
        //...
    }

    if (GetAsyncKeyState(VK_CONTROL) && GetAsyncKeyState(0x34)) {
        //...
    }

    if (GetAsyncKeyState(VK_CONTROL) && GetAsyncKeyState(0x35)) {
        //...
    }

有没有更有效的方法来做到这一点,而不是每个循环多次调用GetAsyncKeyState?也许将函数值存储为整数然后使用switch语句?

另外,我不想使用RegisterHotKey。

1 个答案:

答案 0 :(得分:1)

以下是一些提示。 0.调用func比直接使用值要慢。 1. if-else语句可以构建一个树。树应该通过路径压缩来优化。 您可以像这样宣传您的代码。

static bool keys[256];
int getkey(){          //Don't forget to call this  before querying the "keys" array.
    for(int i=0;i<256;i++)
          GetAsyncKeyState(i);
    return 0;
}
if(keys[VK_CONTROL])
{
    if (keys[0x31]) {
        //...
    }

    if (keys[0x32]) {
       //...
    }

    if (keys[0x33]) {
        //...
    }

    if (keys[0x34]) {
        //...
    }

    if (keys[0x35]) {
        //...
    }
}