C++控制台键盘事件

Cas*_*law 12 c++ windows console keyboard-events

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

Sev*_*yev 9

使用ReadConsoleInput()API.留意亲切的事件KEY_EVENT.这不适用于所有keydown事件(Ctrl-key,shift-key,Pause-key无法读取),但大多数都可以读取.

使用GetNumberOfConsoleInputEvents以避免阻塞.


Joh*_*ler 7

你可以使用GetKeyStateGetAsyncKeyState,但这不会给你keydown/keyup事件.它只会告诉你当前关键的键.

因此,如果您确实需要获取keydown/keyup事件,则可以安装一个钩子.控制台窗口有一个窗口句柄,由Windows中的代码和消息泵拥有,也由Windows中的代码拥有.

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

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