当控制台 Window 未处于焦点 C++ (Windows) 时忽略按键

Ignore key press while Console Window is not in focus C++ (Windows)

我编写了一个控制台应用程序,它等待按键形式的输入。然而,用户可能想要切换应用程序并且这样做会中断游戏,因为 'Spacebar' 是我应用程序中的一个重要键。

我在 Whosebug 上查找了这个主题,所有先前的线程都涉及基于非控制台的应用程序、非 Windows.h 库等。

目前,我的应用程序 getInput() 方法本质上是这样的:

while (true)
{
                if (GetAsyncKeyState(0x31))
                {
                    return 1; //User pressed 1 key
                }
                else if (GetAsyncKeyState(0x32))
                {
                    return 2; //User pressed 2 key
                }
                else if (GetAsyncKeyState(0x33))
                {
                    return 3; //User pressed 3 key
                }
                else if (GetAsyncKeyState(0x34))
                {
                    return 4; //User pressed 4 key
                }
                else if (GetAsyncKeyState(0x35))
                {
                    return 5; //User pressed 5 key
                }
                else if (GetAsyncKeyState(0x36))
                {
                    return 6; //User pressed 6 key
                }
}

我如何获得它以便忽略当控制台 window 不是主要 window 时所做的输入?

谢谢。

您可以使用GetConsoleWindow 来检索控制台输出window 的句柄。使用 GetForegroundWindow 检索用户当前正在使用的 window 的句柄。您可以使用这两个 API 调用引入以下布尔值:

bool isConsoleWindowFocussed = (GetConsoleWindow() == GetForegroundWindow());

并在您的条件下将其与 GetAsyncKeyState 结合使用。