【问题标题】:Redefine 'pause' behaviour in c++ console app in windows在 Windows 中重新定义 C++ 控制台应用程序中的“暂停”行为
【发布时间】:2025-11-28 18:25:01
【问题描述】:

我有一个 Windows c++ 控制台应用程序,我想在运行时按“暂停”键时重新定义程序的行为。我怎么能做到这一点?
如果无法重新定义行为键“暂停”,我如何检测异步按下任何特定键?
我知道 WM_KEYPRESSED 消息,但据我所知,它仅适用于窗口 UI 应用程序。 也许在 boost 中有一些解决方案?

【问题讨论】:

  • 使用while循环...a = std::cin >> ("press space to continue"); while( a != ' '){a = std::cin << ("press space to continue");}
  • @angel 问题是关于键盘上标有 PAUSE 的键
  • 哎呀……对不起,我误会了……

标签: c++ windows asynchronous io


【解决方案1】:

使用SetWindowsHookEx 安装低级键盘挂钩WH_KEYBOARD_LL,它会捕获并丢弃有问题的按键。

【讨论】:

  • 是的,这似乎是解决方案。但是有一个有趣的问题。我找到了这个例子ideone.com/JCGSAT 并开始尝试它。但是,当我将“while (GetMessage(&msg, NULL, 0, 0)) {}”更改为“while (true) {}”时,我的键盘和鼠标停止工作,并且当我按下鼠标按钮时计算机开始发出哔哔声。这是非常奇怪的行为,不是吗?
  • 你能帮我解决这个问题吗?
  • 好的。为此,您需要另一个线程。您需要一个用于窗口挂钩的消息队列。但是您不能在控制台应用程序的主线程之外运行消息队列。因此,在启动时创建一个新线程。把钩子放在那里,在线程中。然后在该线程中运行您的消息循环。另一种方法是运行单独的后台进程。一个没有可见窗口的 gui 应用程序,它劫持了 PAUSE。
最近更新 更多