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

Тема в разделе "Общие вопросы по С и С++", создана пользователем Folderx, 20 авг 2007.

  1. Folderx

    Folderx Гость

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

    mms Гость

    Код (Text):
    int keyCode = _getch();
    if (keyCode == 0 || keyCode == 0xE0);
    {
    int sysKeyCode = _getch();
    }
    Если первый вызов _getch вернул 0 или 0xE0 значит нажали системную кнопку и надо вызвать еще раз эту функцию для получения кода системной клавиши.
     
  3. Folderx

    Folderx Гость

    У меня вместо getch() вот такая штука, которую я сам через интернет собирал по частям, эта штука ожидает нажатия клавиши и возвращает значение. Ну типа вроде тот же getch().

    Код (Text):
     

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

    Folderx Гость

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

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

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

    gamecreator Гость

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

    Folderx Гость

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

    Это короче когда в линуксе будешь сидеть там нету функции getch(), вот этот термиос управляет терминалом блокирует его и ждёт клавиш, если клавиша нажата разблокирует обратно.
     
Загрузка...

Поделиться этой страницей