12

有没有办法在 Windows 控制台中获取关键事件?我需要一种无需 GUI 即可快速获取 keydown 和 keyup 事件的方法。我试过使用 getch(),但它没有得到 keyups 并等到一个键被按下返回。

4

5 回答 5

10

使用ReadConsoleInput()API。留意类似的事件KEY_EVENT。这不适用于所有按键事件(无法读取 Ctrl 键、Shift 键、暂停键),但大多数都可以读取。

用于GetNumberOfConsoleInputEvents避免阻塞。

于 2010-01-14T22:05:09.927 回答
7

您可以使用GetKeyStateor GetAsyncKeyState,但这不会给您 keydown/keyup 事件。它只会告诉您当前哪些键已关闭。

所以如果你真的需要获取 keydown/keyup 事件,你可以安装一个钩子。控制台窗口具有由 Windows 中的代码拥有的窗口句柄和也由 Windows 中的代码拥有的消息泵。

您可以使用GetConsoleWindow获取控制台窗口的窗口句柄,然后使用SetWindowsHookEx安装一个WH_CALLWNDPROC挂钩来监听发送到控制台窗口的消息。

你可以试试WH_MSGFILTER钩子。我不知道这是否适用于控制台窗口,但如果它确实有效,它会产生更少的消息被忽略。

于 2010-01-14T22:38:21.917 回答
2

我只是好奇,这么合乎逻辑的问题怎么在谷歌上没有任何解释,所以不得不在这里问。所以我用谷歌搜索:“键盘事件控制台应用程序”并猜猜是什么......前两个链接很有趣(但不幸的是,不完全回答你的问题):

于 2010-01-14T23:05:11.300 回答
1

有很多方法。GetKeyboardState 将是最明显的之一。

于 2010-01-14T22:06:31.930 回答
-1

你也可以试试SetConsoleCtrlHandler

于 2016-07-17T08:34:25.393 回答