当控制台 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
结合使用。
我编写了一个控制台应用程序,它等待按键形式的输入。然而,用户可能想要切换应用程序并且这样做会中断游戏,因为 '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
结合使用。