Обработка нажатия клавиш

Есть идея написать код С++ который обрабатывал нажатие клавиши так сказать в реальном времени. То есть кнопка нажата выполнилось действие, отпустил эту же кнопку выполнилось другое действие ? Эксперименты с !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.

Так лучше, но не всегда )) Условие будет чуть сложнее.

The _getch and_getwch functions read a single character from the console without echoing the character. None of these functions can be used to read CTRL+C. When reading a function key or an arrow key, each function must be called twice; the first call returns 0 or 0xE0, and the second call returns the actual key code.

Взято отсюда.

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.