Кнопки с клавиатуры

  • Автор темы Автор темы Folderx
  • Дата начала Дата начала
F

Folderx

Как кнопки с клавиатуры обрабатывать, такие как F1 там стрелки влево вправо вверх вниз, юзаю функцию getchar(), так там на всех эти кнопки код 27 возвращается, видимо из-за того что они составные типа ^[[A
 
Код:
int keyCode = _getch();
if (keyCode == 0 || keyCode == 0xE0);
{
int sysKeyCode = _getch();
}

Если первый вызов _getch вернул 0 или 0xE0 значит нажали системную кнопку и надо вызвать еще раз эту функцию для получения кода системной клавиши.
 
У меня вместо getch() вот такая штука, которую я сам через интернет собирал по частям, эта штука ожидает нажатия клавиши и возвращает значение. Ну типа вроде тот же getch().

Код:
#include <termios.h>

char my_getch()
{
struct termios ekran; 
tcflag_t parametri;
tcgetattr(0, &ekran); 
parametri = ekran.c_lflag; 
ekran.c_lflag &= ~(ICANON | ECHO);
tcsetattr(0, TCSANOW, &ekran);

int vvod;
do 
vvod = fgetc(stdin);
while (EOF == vvod);

// Восстановление значений, которые были изменены в начале.
tcgetattr(0, &ekran); 
ekran.c_lflag = parametri; 
tcsetattr(0, TCSANOW, &ekran); 

return vvod;
}

Так вот там на любую клавишу, будь то F1, серая стрелка какая-нибудь, ESC, возвращает код 27, на Enter возвращает код 10.
Функция getchar() то же самое возвращает, а на клавиши шифт контрол алт даже не реагирует, как будто не было нажатия.
 
Всё въехал, там оказывается по три символа на каждую стрелку
27 91 65
27 91 66
27 91 67
27 91 68

Кнопки F.. тоже получил спасибо.
 
termios.h- а что это за header файл????? а принцип работы первой проги не пойму? какое условие вывода на экран сделать?
 
тебе нужен код
Код:
int keyCode = _getch();
keyCode = _getch();
if (keyCode == 0 || keyCode == 0xE0);
{
int sysKeyCode = _getch();
//..........
}
там где закоментена строка из точек пишешь код отображения sysKeyCode, например cout<<sysKeyCode<<endl; и с помощью него определяешь код нужной тебе клавиши (там у тебя ескейп вроде), потом в проге делаешь проверку на эту клавишу, и если она нажата, то выходишь из бесконечного цикла(в который тебе нужно вставить код с условием проверки на клавишу) чтения текста.
 
Там короче был прикол когда ESC равнялся RightArrow, то есть когда нажималась какая-нибудь из стрелок срабатывало событие как будто нажат ESC, короче я стал считывать в массив три значения и только потом проверять их поочерёдно, так разделил ESC и RightArrow

termios.h- а что это за header файл?????
Это короче когда в линуксе будешь сидеть там нету функции getch(), вот этот термиос управляет терминалом блокирует его и ждёт клавиш, если клавиша нажата разблокирует обратно.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!