Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
1 / 1 / 0
Регистрация: 19.12.2013
Сообщений: 43
1

Отлавливать нажатия клавиатуры

13.05.2015, 16:27. Показов 2481. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть консольное приложение под Windows (в Visual Studio). Нужно, чтобы при нажатие на какую-либо клавишу или сочетание клавиш, программа выполняла какаие-то действия. При этом, программа должна выполнять свои основные действия, а не крутиться в бесконечном цикле в ожидании нажатия клавиши. Подскажите пожалуйста, как это можно реализовать?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.05.2015, 16:27
Ответы с готовыми решениями:

Составить программу, которая будет отлавливать нажатия клавиатуры
Составить программу и блок-схему, которая будет отлавливать нажатие клавиш и показывать, какая...

Отлавливать нажатия стрелок
Может данная тема уже затрагивалась, но что-то поиском не могу найти и гугил не помогает. Вобщем...

Асинхронно отлавливать нажатия клавиш в консоли
Есть ли какая-нибудь функция в C#, с помощью которой можно асинхронно отлавливать нажатия клавиш в...

Как лучше отлавливать нажатия клавиш на клавиатуре при активном окне
Здравствуйте.Делается проект Win32 на C++ с WinAPI.Подскажите пожалуйста (желательно с примерами)...

2
11 / 11 / 11
Регистрация: 09.12.2014
Сообщений: 89
13.05.2015, 21:37 2
Лучший ответ Сообщение было отмечено Haamu как решение

Решение

Ваш вопрос противоречив. Ожидание нажатия клавиши само по себе цикл.
Может быть этот код вам поможет.
Программа управления пакманом:
C
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include <graphics.h>
//#include <stdlib.h>
#include <stdio.h>
//#include <conio.h>
 
 
//Прототип функции рисования. Это значит, что сама функция будет объявлена после тела main()
void draw(int x, int y);
 
int main(void)
{
 
int gdriver = DETECT, gmode;
void *ptr; //резервируем пустой указатель - стартовая ячейка памяти, 
// начиная с которой мы будем хранить наше изображение
int x, y, maxx;
unsigned int size;
 
initgraph(&gdriver, &gmode, "");
 
maxx = getmaxx();
//Начальные координаты
x = 30;
y = 30;
 
//Цвет фона
setbkcolor(2);
 
//Рисуем героя
draw(x, y);
 
//Вычисляем, сколько изображение будет занимать в памяти
size = imagesize(x-10, y-10, x+10, y+10);
//Выделяем память начиная с того места, куда указывает указатель
ptr = malloc(size);
//Копируем в память изображение
getimage(x-10, y-10, x+10, y+10, ptr);
 
int key;
int nx=x;
int ny=y;
 
 
do
{
key=getch(); //Обработка нажатия клавиш
 
switch(key){
case 80: ny+=10; break;
case 72: ny-=10; break;
case 77: nx+=10; break;
case 75: nx-=10; break;
}
 
//Стираем старое изображение наложением на него нового
putimage(x-10, y-10, ptr, XOR_PUT);
 
//Меняем координаты соответственно нажатой клавише
x = nx;
y=ny;
 
//Выводим изображение
putimage(x-10, y-10, ptr, XOR_PUT);
 
}while(key!=27);
 
//Освобождаем память
free(ptr);
//Закрываем графику
closegraph();
return 0;
}
 
//Функция рисования. Сюда можно запрограммировать любой рисунок
void draw(int x, int y)
{
 
setcolor(14);
setfillstyle(1,14);
moveto(x, y);
pieslice(x,y,20,350,10);
setfillstyle(1,4);
fillellipse(x+1,y-4,2,2);
}
0
1 / 1 / 0
Регистрация: 19.12.2013
Сообщений: 43
14.05.2015, 10:12  [ТС] 3
Вобщем-то задача немного проще, по нажатию клавиши/сочетания клавиш программа должна завершать свою работу, но перед завершением выполнить еще некоторые действия. Вот как я ее решил:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
BOOL CtrlHandler(DWORD fdwCtrlType);
 
int main(int argc, char **argv)
{
    SetConsoleCtrlHandler((PHANDLER_ROUTINE)CtrlHandler, TRUE));
    
    //Код программы
}
 
BOOL CtrlHandler(DWORD fdwCtrlType) 
{
    //Действия перед завершением
    
    return FALSE;
}
А все-же не понимаю, как тогда работают программы с пользовательским интерфейсом, где функции вызываются по нажатию клавиши или щелчку мыши?
0
14.05.2015, 10:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.05.2015, 10:12
Помогаю со студенческими работами здесь

Хук клавиатуры - как отлавливать русские символы?
Public Class Form1 &lt;Runtime.InteropServices.DllImport(&quot;user32.dll&quot;)&gt; _ Public Shared...

Как "отлавливать" все нажатия определенной клавиши на клавиатуре(например tab)
Нужно чтобы вместо &quot;ctrl&quot; всегда нажималась клавиша &quot;esc&quot; вне зависимости где мы находимся на...

Как отлавливать нажатия клавиш в игре? Как их виртуально нажимать в игре?
Всем привет. Где-то месяц назад прочитал статью об каком-то парне, что сделал самообучающую...

C++ события нажатия клавиатуры
помогите сделать мини программу, при нажатии на alt-x-f выводилось messagebox с текстом на...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru