Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 22.01.2013
Сообщений: 13

Отслеживание нажатия 2-х клавиш

05.10.2013, 17:37. Показов 3733. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго дня.
Суть вопроса вот в чем.
Нужно в терминале (без граф оболочки) отслеживать нажатие 2-х клавиш а именно комбинации стрелок.
Читал про библиотеку SDL там есть функция GetKeyState пробовал танцы с бубном с этой функцией не помогло, не получилось вообще поймать нажатие клавиши. А так же читал про библиотеку ncurses, но особых плодов тоже не принесло.
Порывшись на форуме нашел способ отлавливать только 1 клавишу
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <iostream>
#include <termios.h>
#include <unistd.h>
int main ()
{
    int ch;
    while(1)
    {
     struct termios oldt,
     newt;
     tcgetattr( STDIN_FILENO, &oldt );
     newt = oldt;
     newt.c_lflag &= ~( ICANON | ECHO );
     tcsetattr( STDIN_FILENO, TCSANOW, &newt );
     ch = getchar();
     tcsetattr( STDIN_FILENO, TCSANOW, &oldt );
   printf("%d", ch);  
    }
}
устраивал пляски с бубном но ничего не вышло.
Подскажите в какую сторону копать, или приведите пример отлова 2-х клавиш.
Далее пошел по известному пути google.ru и начал искать на тему проверки состояния клавиши отжата\нажата, ничего толкового не нашел, нашел только виндовые плюхи winAPI и тому подобные, аналога этих плюшек я не нашел.
NEED HELP.
Заранее спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.10.2013, 17:37
Ответы с готовыми решениями:

Перехват нажатия клавиш XGrabKeyboard
Нашёл готовое решение, немного допилил и получился вот такой говнокод: #include &lt;X11/Xlib.h&gt; #include &lt;X11/Xutil.h&gt; ...

Обработка нажатия клавиш клавиатуры в программе на C++
Здравствуйте, уважаемые форумчане и великие гуру! У меня есть такой вопрос: Как можно запрограммировать на C++, чтобы на определённом...

Отслеживание нажатия клавиш на C++
Здравствуте, прочитал статью про то как перехватывать нажатие клавиш средствами...

5
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
05.10.2013, 23:04
Вам нужно перевести ядерный драйвер влавиатуры в режим чтения скан-кода или кей-кода
C
1
ioctl(0, KDSKBMODE, K_RAW);
или
C
1
ioctl(0, KDSKBMODE,K_MEDIUMRAW);
Можете поэксперементировать в утилитой showkey, а при желании посмотрей ее исходники.
0
0 / 0 / 0
Регистрация: 22.01.2013
Сообщений: 13
06.10.2013, 10:26  [ТС]
Цитата Сообщение от gng Посмотреть сообщение
Вам нужно перевести ядерный драйвер влавиатуры в режим чтения скан-кода или кей-кода
C
1
ioctl(0, KDSKBMODE, K_RAW);
или
C
1
ioctl(0, KDSKBMODE,K_MEDIUMRAW);
Можете поэксперементировать в утилитой showkey, а при желании посмотрей ее исходники.
Благодарю буду читать!
Может еще что нибуть посеоветуете?
0
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
06.10.2013, 15:47
Разобраться с showkey.c, думаю, будет достаточно.
О работе драйвера клавиатуры можно почитать, например, в linuxjournal
0
0 / 0 / 0
Регистрация: 22.01.2013
Сообщений: 13
09.10.2013, 09:21  [ТС]
Всем здрасте!
Вообщем я в корне пересмотрел свою цель, задачу и способ реализации и многое мне стало ясно и проще!
вообщем общая цель
1)написать программу на с++ с использованием граф интерфейса
2)отслеживать нажатие и отпускание клавиш
3)формировать массив из 4-х int значений а именно 1 и 0
4)запись данного массива в файл и вывод данного массива в граф оболочку
Что у меня сделано
1)Элементарный графический интерфейс с 4 метками которые показывают нажата клавиша или нет
2)Нажатые клавиши отслеживаются
На чем я встал в тупик
1)как формировать массив в простом с++ без оболочки я знаю и умею! А как то правильно делать в QT не знаю.
2)Как вывести массив в граф оболочку непосредственно в определенную метку.
Вот Код Qt
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include "dialog.h"
#include "ui_dialog.h"
#include<QKeyEvent>
 
Dialog::Dialog(QWidget *parent) :
  QDialog(parent),
  ui(new Ui::Dialog)
{
  ui->setupUi(this);
}
 
Dialog::~Dialog()
{
  delete ui;
}
void Dialog::keyPressEvent(QKeyEvent *PressEvent)
{
  const int firstkeyEvent = PressEvent->key();
 
      if(firstkeyEvent == Qt::Key_W)
        {
          ui->UP_lb->setText("pressed");
        }
      if(firstkeyEvent == Qt::Key_S)
        {
          ui->DW_lb->setText("Pressed");
        }
      if(firstkeyEvent == Qt::Key_D)
        {
          ui->R_lb->setText("Pressed");
        }
      if(firstkeyEvent == Qt::Key_A)
        {
          ui->L_lb->setText("Pressed");
        }
}
void Dialog::keyReleaseEvent(QKeyEvent *ReleaseEvent)
{
  const int secondkeyEvent = ReleaseEvent->key();
 
      if(secondkeyEvent == Qt::Key_W)
        {
          ui->UP_lb->setText("UP");
        }
      if(secondkeyEvent == Qt::Key_S)
        {
          ui->DW_lb->setText("Down");
        }
      if(secondkeyEvent == Qt::Key_D)
        {
          ui->R_lb->setText("Right");
        }
      if(secondkeyEvent == Qt::Key_A)
        {
          ui->L_lb->setText("Left");
        }
}
Заранее спасибо
0
 Аватар для programina
2062 / 619 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
23.10.2013, 10:55
AlexSMG95, для асинхронной работы с клавиатурой используй:

C++
Display *display;
char keys[32];
 
XQueryKeymap(display , keys);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.10.2013, 10:55
Помогаю со студенческими работами здесь

Отслеживание нажатий клавиш, когда окно программы не в фокусе
Доброго времени суток, цель - написать программу, выполняющую код функции (напишу самостоятельно) по нажатию клавиши. Функций должно быть...

Отслеживание нажатия клавиш
Помогите решить Напишите программу, печатающие коды, генерируемые при нажатии любой клавиши или комбинации клавиш. Используйте функцию...

Отслеживание нажатия клавиш
Есть label1. Как сделать так, чтобы при нажатии клавиши &quot;w&quot; текст label1 менялся на &quot;ww&quot;?

Отслеживание нажатия клавиш.
#include &lt;iostream&gt; #include &lt;string&gt; #define FOR(i,a,b) for (int i(a), _n(b); i &lt; _n; ++i) using namespace std; int...

Отслеживание нажатия клавиш
здравствуйте форумчане! подскажите пожалуйста, как сделать что бы при нажатии клавиши(например f1-f12)сработал определённый код....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита табличной части. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru