当控制台窗口不在焦点中时忽略按键.c++ (Windows)

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

本文关键字:c++ Windows 窗口 控制台 焦点      更新时间:2023-10-16

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

我已经在StackOverflow上查找了这个主题,所有先前的线程都涉及非基于控制台的应用程序,非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
                }
}

我如何得到它,以便它将忽略输入当控制台窗口不是主窗口?

谢谢。

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

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

并在您的条件中与GetAsyncKeyState连接使用