Подтвердить что ты не робот

События консоли консоли С++

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

4b9b3361

Ответ 1

Вы можете использовать GetKeyState или GetAsyncKeyState, но это не даст вам событий keydown/keyup. Он расскажет вам, какие клавиши в данный момент недоступны.

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

Вы можете получить дескриптор окна окна консоли, используя GetConsoleWindow Затем установите крюк WH_CALLWNDPROC, используя SetWindowsHookEx для прослушивания при отправке сообщений в окно консоли.

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

Ответ 2

Используйте ReadConsoleInput() API. Следите за событиями рода KEY_EVENT. Это не будет работать для всех событий keydown (Ctrl-key, shift-key, Pause-key не может быть прочитана), но большинство из них можно прочитать.

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

Ответ 3

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

Ответ 4

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