Там какой-либо путь состоит в том, чтобы получить ключевые события в консоли Windows? Мне нужен способ получить keydown и keyup события быстро без GUI. Я попытался использовать getch (), но это не получает keyups и ожидает, пока клавиша не была нажата для возврата.
Вы можете использовать GetKeyState
или GetasynckeyState
, но это не даст вам события ключевых клавиш. Он только скажет вам, какие ключи в данный момент.
Итак, если вам действительно нужно получить события KeyDown / Keyup, вы можете установить крючок. У консоли окно имеет ручку окна, которая принадлежит коду в Windows и насос сообщений, также принадлежащего коду в Windows.
Вы можете получить рукоятку окна окна консоли с помощью getConsoleWindow , затем установите WH_CALLWNDPROC
крюк с использованием SetWindowshookex , чтобы прослушать в сообщениях Консольное окно.
Вместо этого вы можете попробовать wh_msgfilter
. Я не знаю, работает ли это для консоли Windows, но она генерирует меньше сообщений, которые будут игнорироваться, если она будет работать.
Использование ReadConsoleInput ()
API. Наблюдать за событиями вида KEY_EVENT
. Это не будет работать на все keydown события (клавиша Ctrl, клавиша Shift, клавиша Pause не может быть считана), но большинство может быть считано.
Использование GetNumberOfConsoleInputEvents
, чтобы не блокироваться.
Мне было просто любопытно, как такой логический вопрос не имеет никакого объяснения в Google, Так нужно спросить это здесь. Поэтому я гурил на: «Клавиатурное событие консоли приложения» и Угадай, что ... первые 2 ссылки интересны (но, к сожалению, не совсем ответы на ваш вопрос):
Есть несколько способов. GetKeyboardState будет одним из самых очевидных.