Обработка нажатия клавиш
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Есть идея написать код С++ который обрабатывал нажатие клавиши так сказать в реальном времени. То есть кнопка нажата выполнилось действие, отпустил эту же кнопку выполнилось другое действие ? Эксперименты с !kbhit() желаемого результата не дают. Работаю в консоли.
Как то так?
#include <iostream> #include <conio.h> #include <windows.h> using namespace std; int main() { setlocale ( 0, "" ); while ( true ) { if ( kbhit() ) { cout << "Кнопка нажата" << endl; //другие действия while ( kbhit() ) getch(); } else { cout << "Кнопка не нажата" << endl; } Sleep ( 250 ); } return 0; }
Да да отлично я его не много дополнил, идеально то что хотел. Спасибо )
введите код здесь int main()
{
setlocale ( 0, «» );
while ( true )
{
if ( kbhit() )
{
cout << «1» << endl;
//äðóãèå äåéñòâèÿ
while ( kbhit() ) getch();
}
else
{
cout << «2» << endl;
}
Sleep ( 250 ); system("cls"); } return 0;
}
porshe, так будет почище:
#include <iostream> #include <conio.h> #include <windows.h> using namespace std; int main() { setlocale ( 0, "" ); int button; while ( true ) { if ( kbhit() ) { button = getch(); cout << "Нажата кнопка " << button << endl; //другие действия } else { cout << "Кнопка не нажата" << endl; } Sleep ( 250 ); } return 0; }
Cranium, да будет, но не всегда. Если нажата клавиша с дополнительным кодом? Тогда лучше так:
if ( kbhit() ) { button = getch(); int extendent = 0; if ( button ) { cout << "Нажата клавиша. Не расширенный символ\n"; } else { extentent = getch(); cout << "Нажата клавиша. Расширенный символ\n"; } }
Хотя точно не знаю. Ваш код обрабатывает нажатия клавиш с расширенным кодом, но не сохраняет их в памяти( или сохраняет, но я не понимаю как? ).
Ещё есть странность. Без очистки буфера клавиатуры ( цикл
while
). У меня код не работал, даже если я вставлял дваgethc
'a.Так лучше, но не всегда )) Условие будет чуть сложнее.
Взято отсюда.
GetAsyncKeyState в помощь