C ++ GetAsyncKeyState在控制台窗口中不起作用

时间:2015-03-12 20:22:38

标签: c++ winapi

我试图用C ++学习和实验abit这是它到目前为止的样子:

int main() {
    std::vector<std::string> lines = {
        "Fancy Centered Text!",
    };

    if (GetAsyncKeyState(VK_F1) & 1)
    {
        cout << "LOL";
        if (GetAsyncKeyState(VK_SPACE))
        {
            Sleep(100);
            keybd_event(0x50, 0, 0, 0);
            Sleep(100);
            keybd_event(0x50, 0, KEYEVENTF_KEYUP, 0);
        }
    }

    int num_cols = 75;

    // VIRTUAL BORDER
    std::cout << std::endl;
    for (int i = 0; i < num_cols; ++i) std::cout << ' ';
    std::cout << ' ' << std::endl;

    // OUTPUT
    for (int i = 0; i < lines.size(); ++i) {
        centerify_output(lines[i], num_cols);
        std::cout << std::endl;
    }

    // VIRTUAL BORDER
    std::cout << std::endl;
    for (int i = 0; i < num_cols; ++i) std::cout << ' ';
    std::cout << ' ' << std::endl;
}

所以问题是当用户按下F1并左键单击时,它会按下一次键(在这种情况下,Q为例)。 它编译没有错误或问题,当我尝试按F1并左键单击时没有真正发生。

也许我太盲目,看不出什么错,任何帮助都会很棒!

1 个答案:

答案 0 :(得分:1)

如果要在执行期间注册多个按键并处理它们,则需要在循环内运行GetAsyncKeyState以及所有函数。否则,程序只是在收到按键后完成执行,你需要一个循环跳回按键并再次接收/处理它。