有什么办法可以在Windows控制台中获取关键事件? 我需要一种方法来快速获得keydown和keyup事件,而不需要GUI。 我已经尝试过使用getch(),但是它没有得到keyups并等到一个键被按下才返回。
您可以使用GetKeyState
或GetAsyncKeyState
,但不会给你keydown / keyup事件。 它只会告诉你什么键正在关闭。
所以如果你真的需要得到keydown / keyup事件,你可以安装一个钩子。 控制台窗口有一个窗口句柄,该窗口句柄由Windows中的代码和消息泵拥有,也由Windows中的代码拥有。
您可以使用GetConsoleWindow获取控制台窗口的窗口句柄然后使用SetWindowsHookEx安装WH_CALLWNDPROC
挂钩来侦听发送到控制台窗口的消息。
您可以尝试使用WH_MSGFILTER
钩子。 我不知道这是否适用于控制台窗口,但它会产生更少的消息被忽略,如果它的工作。
使用ReadConsoleInput()
API。 注意类型为KEY_EVENT
事件。 这不适用于所有的keydown事件(Ctrl键,Shift键,暂停键不能被读取),但是大部分都可以被读取。
使用GetNumberOfConsoleInputEvents
来避免阻塞。
我只是好奇,怎么这么合乎逻辑的问题对Google没有任何解释,所以一定要在这里问一下。 所以我GOOGLE: “键盘事件控制台应用程序”,并猜测什么…前2链接是有趣的(但不幸的是,不完全解答你的问题):
有很多方法。 GetKeyboardState将是最明显的一个。
您也可以尝试SetConsoleCtrlHandler