Консольные события клавиатуры C++

Там какой-либо путь состоит в том, чтобы получить ключевые события в консоли Windows? Мне нужен способ получить keydown и keyup события быстро без GUI. Я попытался использовать getch (), но это не получает keyups и ожидает, пока клавиша не была нажата для возврата.

12
задан Cassidy Laidlaw 14 January 2010 в 22:01
поделиться

4 ответа

Вы можете использовать GetKeyState или GetasynckeyState , но это не даст вам события ключевых клавиш. Он только скажет вам, какие ключи в данный момент.

Итак, если вам действительно нужно получить события KeyDown / Keyup, вы можете установить крючок. У консоли окно имеет ручку окна, которая принадлежит коду в Windows и насос сообщений, также принадлежащего коду в Windows.

Вы можете получить рукоятку окна окна консоли с помощью getConsoleWindow , затем установите WH_CALLWNDPROC крюк с использованием SetWindowshookex , чтобы прослушать в сообщениях Консольное окно.

Вместо этого вы можете попробовать wh_msgfilter . Я не знаю, работает ли это для консоли Windows, но она генерирует меньше сообщений, которые будут игнорироваться, если она будет работать.

7
ответ дан 2 December 2019 в 19:31
поделиться

Использование ReadConsoleInput () API. Наблюдать за событиями вида KEY_EVENT. Это не будет работать на все keydown события (клавиша Ctrl, клавиша Shift, клавиша Pause не может быть считана), но большинство может быть считано.

Использование GetNumberOfConsoleInputEvents , чтобы не блокироваться.

9
ответ дан 2 December 2019 в 19:31
поделиться

Мне было просто любопытно, как такой логический вопрос не имеет никакого объяснения в Google, Так нужно спросить это здесь. Поэтому я гурил на: «Клавиатурное событие консоли приложения» и Угадай, что ... первые 2 ссылки интересны (но, к сожалению, не совсем ответы на ваш вопрос):

2
ответ дан 2 December 2019 в 19:31
поделиться

Есть несколько способов. GetKeyboardState будет одним из самых очевидных.

1
ответ дан 2 December 2019 в 19:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: