• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

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

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

Folderx

Как кнопки с клавиатуры обрабатывать, такие как F1 там стрелки влево вправо вверх вниз, юзаю функцию getchar(), так там на всех эти кнопки код 27 возвращается, видимо из-за того что они составные типа ^[[A
 
M

mms

Код:
int keyCode = _getch();
if (keyCode == 0 || keyCode == 0xE0);
{
int sysKeyCode = _getch();
}

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

Folderx

У меня вместо 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() то же самое возвращает, а на клавиши шифт контрол алт даже не реагирует, как будто не было нажатия.
 
F

Folderx

Всё въехал, там оказывается по три символа на каждую стрелку
27 91 65
27 91 66
27 91 67
27 91 68

Кнопки F.. тоже получил спасибо.
 
G

Guest

termios.h- а что это за header файл????? а принцип работы первой проги не пойму? какое условие вывода на экран сделать?
 
G

gamecreator

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

Folderx

Там короче был прикол когда ESC равнялся RightArrow, то есть когда нажималась какая-нибудь из стрелок срабатывало событие как будто нажат ESC, короче я стал считывать в массив три значения и только потом проверять их поочерёдно, так разделил ESC и RightArrow

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

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