0

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

    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。

4

1 回答 1

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]) {
        //...
    }
}
于 2013-05-22T03:16:34.387 回答