【发布时间】:2015-06-23 03:48:57
【问题描述】:
我编写了一个 C++ 控制台程序,它为用户显示一个带有多个选项的菜单,其中一个进入连续循环,退出循环的条件是 !GetAsyncKeyState(VK_ESCAPE)。因此,如果用户按下 ESC,则在此循环的下一次开始时,它将退出并再次显示主菜单。
当用户没有将我的程序放在焦点上并按下 ESC 键时会出现问题,GetAsyncKeyState 仍会返回按下 ESC 键并退出循环。
如何实现仅在我的程序处于焦点时才听 ESC 键的解决方案?
- 我不能使用 getline、getch 或任何行输入方法,因为我要让循环运行,而且我不能在每次迭代时都要求用户输入。
- 该解决方案可能取决于平台,因为它只能在 Windows 上运行。
- 我必须坚持使用 C++,因为我使用的是唯一“可用”实现是 C++ 版本的库。
这对于编写 c++ 控制台程序的其他人可能很有用,该程序具有一个循环,当按下一个键并且程序处于焦点时退出。
提前致谢!
【问题讨论】:
-
因此,如果我理解正确,您会显示一个菜单,如果选择其中一个选项,将开始运行无限循环。然后你想让用户按下一个键来终止循环并将用户返回到主菜单?
-
@NathanOliver 是正确的。这已经可以工作了,问题是即使在用户做其他事情时按下了键,程序也会退出循环,而不是让我的程序处于焦点。
-
在检查按下的键之前是否检查过windows is enabled?
-
@nathan:你确定,你可以获得控制台程序的窗口句柄吗?
-
@MikeMB 当然。你可以使用
GetConsoleWindow()
标签: c++ windows loops keylistener onfocus