Обнаружение и интерпретация попадания в консольную клавиатуру - PullRequest
1 голос
/ 02 мая 2011

Эй, мне рекомендовано, чтобы я использовал функцию kdhit () для обнаружения нажатия клавиш в окне консоли:

"Если это Windows, то функция kbhit () - это тот парень, который вам нужен.Если это * nix, вот эмулятор kbhit (). Kbhit () немедленно возвращается (без блокировки) с флагом, который говорит, что есть или нет символ клавиатуры, ожидающий чтения. Вы можете проверить флаг, чтобы увидеть, нужно ли вамвыдайте чтение с клавиатуры. "

Однако я хотел бы знать самый простой, надеюсь, стандартный способ чтения буфера ключей или того, что он называет флагом.Какие-нибудь советы? Спасибо!

Ответы [ 3 ]

3 голосов
/ 17 мая 2011

Нет стандартного способа сделать это, потому что, как уже было отмечено, нет гарантии того, что ваше приложение работает на компьютере, на котором даже есть клавиатурное устройство, и как вы выполняете такие функции пользовательского интерфейса, как это, даже когда клавиатура сильно варьируется от платформы к платформе.

На этот счет тот, кто сказал вам, что kbhit() была функцией Windows, дезинформировал вас.kbhit(), getch() и их родственники фактически являются частью (привязки языка C к) MS-DOS API. Их присутствие в библиотеках времени выполнения для OS / 2,Win32 и другие компиляторы C / C ++ просто должны быть помощником при переносе программ MS / PC / DR-DOS .Библиотека сопоставляет их с любым механизмом native для доступа к клавиатуре, если он вообще существует, и обычно только для приложений TUI, а не GUI, для доступа к клавиатуре.

Если вы пишете новое приложение TUI, не используйте API MS-DOS.Используйте соответствующий собственный API-интерфейс для целевой платформы, такой как Консольный API Win32 или Консольный API OS / 2 или Общий терминал POSIX Интерфейс (через ncurses или некоторые другие).

1 голос
/ 02 мая 2011

Используйте _kbhit (), чтобы проверить, нажата ли клавиша. и когда это используется, используйте _getch (), чтобы получить значение. (обратите внимание, _getch () может вернуть 0 или 0xE0 для специальных ключей и снова вызвать _getch () для этого значения) для отображения символов во время чтения используйте _getche ().

1 голос
/ 02 мая 2011

Очень полезно - GetAsyncKeyState

Проверьте это http://msdn.microsoft.com/en-us/library/ms646293%28v=vs.85%29.aspx

...