Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
Nice-crazy
5 / 5 / 5
Регистрация: 10.03.2013
Сообщений: 139
1

Как сделать распознавание клавиатуры в неактивном окне?

01.02.2015, 14:09. Просмотров 1111. Ответов 24
Метки нет (Все метки)

Допустим сижу такой в браузере,нажимаю кнопку(ASCII 33(ALT+1=!)) и моя программа начинает работать.
Вот сделал пример,работает если только зайти в программу и нажать ALT+1,а нужно чтоб она была свернута и ппи нажатии ALT+1 начинала работать

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <conio.h>
#include <windows.h>
#include <unistd.h>
using namespace std;
int main() 
{
int k=getch();
float a=1;
    if (k==33) {
 do{
    Sleep(50);
    keybd_event(32, 0, 0, 0);
    Sleep(25);
    keybd_event(32, 0, KEYEVENTF_KEYUP, 0);
    cout<<a<<"\n";
    a=a+0.01;
}while(a<=100);
    }           
    return 0;       
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.02.2015, 14:09
Ответы с готовыми решениями:

Клик мыши в неактивном окне
Открыто окно Opera, свёрнут Google Chrome Мы запускаем программу, которая...

Как сделать так, чтобы в окне, созданом OpenGL, рисовали 2 потока?
Вот не знаю, где создать тему, с одной стороны это надо в разделе OpenGL, с...

Как сделать распознавания текста в окне программы и делать эмуляцию нажатия клавиш
Помогите пожалуйста!

Как сделать, чтобы в окне программы при запуске переменные стояли на разных строках?
как сделать что бы в окне программы(см. рисунок) при запуске,переменные...

Как можно сделать что бы в консольном окне можно было вызвать контекстное меню как в win cmd?
Если вызвать cmd в windows то в нем можно вызывать контекстное меню и совершать...

24
nmcf
6274 / 5577 / 2537
Регистрация: 14.04.2014
Сообщений: 23,468
01.02.2015, 14:30 2
Стандартно никак.
Здесь посмотри: http://pblog.ru/?p=293
0
Nice-crazy
5 / 5 / 5
Регистрация: 10.03.2013
Сообщений: 139
01.02.2015, 14:45  [ТС] 3
Вот еще пример сделал,работает через функцию GetAsyncKeyState, но всеравно работает только в активном окне,если оно не активно то не работает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <conio.h>
#include <windows.h>
#include <unistd.h>
using namespace std;
int main() 
{
int k=getch();
//int k1=getch();
float a=1;
    if (GetAsyncKeyState(VK_F2)) {
 do{
    Sleep(50);
    keybd_event(32, 0, 0, 0);
    Sleep(25);
    keybd_event(32, 0, KEYEVENTF_KEYUP, 0);
    cout<<a<<"\n";
    a=a+0.01;
}while(a<=100);
    }             
    return 0;       
}
0
ValeryS
Модератор
7262 / 5516 / 692
Регистрация: 14.02.2011
Сообщений: 18,673
01.02.2015, 14:50 4
система определяет события клавиатуры и посылает в активное окно, в неактивное ничего не шлет
для того чтобы перехватывать события клавиатуры, до того как они до окна используются хуки
0
Nice-crazy
5 / 5 / 5
Регистрация: 10.03.2013
Сообщений: 139
01.02.2015, 15:35  [ТС] 5
Помогите с перехватом этим(хуки)
в инете роюсь бред такой,можно пример простой,и раписать его
0
ValeryS
Модератор
7262 / 5516 / 692
Регистрация: 14.02.2011
Сообщений: 18,673
01.02.2015, 16:04 6
Цитата Сообщение от Nice-crazy Посмотреть сообщение
можно пример простой,
нет
хуки это не так просто
вот по моему достаточно понятный справочник
http://www.firststeps.ru/mfc/winapi/hook/hook1.html

Добавлено через 4 минуты
от туда же реальный пример
http://www.firststeps.ru/mfc/winapi/r.php?152
0
Nice-crazy
5 / 5 / 5
Регистрация: 10.03.2013
Сообщений: 139
01.02.2015, 16:41  [ТС] 7
Цитата Сообщение от ValeryS Посмотреть сообщение
от туда же реальный пример
http://www.firststeps.ru/mfc/winapi/r.php?152
а как сделать имеено если перехватило кнопку Ф2 (VK_F2) то оно выполняло действие
0
ValeryS
Модератор
7262 / 5516 / 692
Регистрация: 14.02.2011
Сообщений: 18,673
01.02.2015, 16:45 8
Цитата Сообщение от Nice-crazy Посмотреть сообщение
а как сделать имеено если перехватило кнопку Ф2 (VK_F2) то оно выполняло действие
смотри в примере
когда запускается хук то в функцию SetWindowsHookEx передается адрес функции перехватчика
вот в этой функции и анализируются приходящие данные и в зависимости от условия что то делается
0
Nice-crazy
5 / 5 / 5
Регистрация: 10.03.2013
Сообщений: 139
01.02.2015, 16:59  [ТС] 9
Цитата Сообщение от ValeryS Посмотреть сообщение
смотри в примере
когда запускается хук то в функцию SetWindowsHookEx передается адрес функции перехватчика
вот в этой функции и анализируются приходящие данные и в зависимости от условия что то делается
я то вижу ( SetWindowsHookEx(WH_KEYBOARD,&HookProc, NULL, 0); )
значит HookProc(int nCode, WPARAM wParam, LPARAM lParam)
Hookproc там и кроется кнопка?или не,тогда где вписывать на какую кнопку реагировать программе

Добавлено через 3 минуты
и еще,я все это делаю в Dev-Cpp, а там уж эмбаркадеро вроде
0
ValeryS
Модератор
7262 / 5516 / 692
Регистрация: 14.02.2011
Сообщений: 18,673
01.02.2015, 17:01 10
Цитата Сообщение от Nice-crazy Посмотреть сообщение
значит HookProc(int nCode, WPARAM wParam, LPARAM lParam)
туда приходят данные с клавиатуры, а ты уже должен их проанализировать и решить что делать
вот из первой ссылки
Hook-точка WH_KEYBOARD дает возможность прикладной программе контролировать поток сообщений для сообщений WM_KEYDOWN и WM_KEYUP, которые функция GetMessage или PeekMessage намеревается возвратить. Вы можете использовать hook-точку WH_KEYBOARD, чтобы контролировать ввод с клавиатуры, переданный в очередь сообщений.

Для получения дополнительной информации, см. статью о функции KeyboardProc.
а вот и про неё
http://www.firststeps.ru/mfc/winapi/hook/r.php?32
видать ссылки не читал
0
Nice-crazy
5 / 5 / 5
Регистрация: 10.03.2013
Сообщений: 139
01.02.2015, 17:26  [ТС] 11
Цитата Сообщение от ValeryS Посмотреть сообщение
туда приходят данные с клавиатуры, а ты уже должен их проанализировать и решить что делать
вот из первой ссылки
Hook-точка WH_KEYBOARD дает возможность прикладной программе контролировать поток сообщений для сообщений WM_KEYDOWN и WM_KEYUP, которые функция GetMessage или PeekMessage намеревается возвратить. Вы можете использовать hook-точку WH_KEYBOARD, чтобы контролировать ввод с клавиатуры, переданный в очередь сообщений.
Для получения дополнительной информации, см. статью о функции KeyboardProc.
а вот и про неё
http://www.firststeps.ru/mfc/winapi/hook/r.php?32
видать ссылки не читал
мой мозг кипит, можно мне уже конкретный пример нажали кнопку ф2 то сделать действие
ну как в примере ток с использованием хука
а то я щас с ума сойду,местами понимаю,мне прост нужен конкретный пример с надписями тогда я точно пойму,я так лучше понимаю
0
ValeryS
Модератор
7262 / 5516 / 692
Регистрация: 14.02.2011
Сообщений: 18,673
01.02.2015, 17:51 12
я правильно понимаю что я должен написать эту программу,потому что кому то учится лень?
0
Nice-crazy
5 / 5 / 5
Регистрация: 10.03.2013
Сообщений: 139
01.02.2015, 18:08  [ТС] 13
Цитата Сообщение от ValeryS Посмотреть сообщение
я правильно понимаю что я должен написать эту программу,потому что кому то учится лень?
ну мне пример хотяб,чтоб я вьехал)
0
ValeryS
Модератор
7262 / 5516 / 692
Регистрация: 14.02.2011
Сообщений: 18,673
01.02.2015, 18:39 14
например так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
LRESULT CALLBACK KeyboardProc
(
    int code,       // код hook-точки
    WPARAM wParam,  // код виртуальной клавиши
    LPARAM lParam     // информация о сообщении нажатой клавиши
)
{
 if (code<0)
  return  CallNextHookEx(hhk,code,wParam,lParam);
 
if(wParam==VK_F2)
  {
  if(lParam&0x80000000)
    // нажата, что то делаем
  else
    // отпущена, что то делаем 
  
  }
return  CallNextHookEx(hhk,code,wParam,lParam);
}
0
Nice-crazy
5 / 5 / 5
Регистрация: 10.03.2013
Сообщений: 139
01.02.2015, 19:19  [ТС] 15
ну вот у меня вышло так
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
#include <iostream>
#include <conio.h>
#include <windows.h>
#include <unistd.h>
 
using namespace std;
 
 
 
int main() 
{
LRESULT CALLBACK KeyboardProc
(
    int code,       // êîä hook-òî÷êè
    WPARAM wParam,  // êîä âèðòóГ*ëüГ*îé ГЄГ«Г*ГўГЁГёГЁ
    LPARAM lParam     // ГЁГ*ôîðìГ*öèÿ Г® ñîîáùåГ*ГЁГЁ Г*Г*Г¦Г*òîé ГЄГ«Г*ГўГЁГёГЁ
)
{
 if (code<0)
  return  CallNextHookEx(hhk,code,wParam,lParam);
 
if(wParam==VK_F2)
  {
  if(lParam&0x80000000)
    // Г*Г*Г¦Г*ГІГ*, Г·ГІГ® ГІГ® äåëГ*ГҐГ¬
  else
    // îòïóùåГ*Г*, Г·ГІГ® ГІГ® äåëГ*ГҐГ¬ 
  
  }
return  CallNextHookEx(hhk,code,wParam,lParam);
}
 
    return 0;       
}
выходит 3 ошибки
E:\ìèíóòêà cpp\main.cpp In function 'int main()':
18 1 E:\ìèíóòêà cpp\main.cpp [Error] a function-definition is not allowed here before '{' token
34 1 E:\ìèíóòêà cpp\main.cpp [Error] expected '}' at end of input

Добавлено через 1 минуту
мучалс мин 10,незнаю как исправить,что с этими скобками
0
ValeryS
Модератор
7262 / 5516 / 692
Регистрация: 14.02.2011
Сообщений: 18,673
01.02.2015, 19:28 16
как это функцию можно определить внутри другой функции?
0
Nice-crazy
5 / 5 / 5
Регистрация: 10.03.2013
Сообщений: 139
01.02.2015, 20:08  [ТС] 17
Цитата Сообщение от ValeryS Посмотреть сообщение
как это функцию можно определить внутри другой функции?
воблин задача,пытаюсь переделывать пишет 'тут функция что в иф' was not declared in this scope
не могу понять как это все так вписать

Добавлено через 22 минуты
в общем я пытался пытался,переделывал,переделывал,в общем как сделать чтоб не было функция в функции
0
nmcf
6274 / 5577 / 2537
Регистрация: 14.04.2014
Сообщений: 23,468
01.02.2015, 21:00 18
Вынеси её наверх, перед main().

А будет ли это работать с консольным приложением?
0
Nice-crazy
5 / 5 / 5
Регистрация: 10.03.2013
Сообщений: 139
01.02.2015, 23:41  [ТС] 19
Цитата Сообщение от nmcf Посмотреть сообщение
Вынеси её наверх, перед main().
А будет ли это работать с консольным приложением?
Вынес за маин,ошибок куча
0
kravam
быдлокодер
1709 / 896 / 105
Регистрация: 04.06.2008
Сообщений: 5,531
01.02.2015, 23:55 20
По хукам обалденно расписано у Айзелиона, но там ассемблер. Недельки две посидишь, всё поймёшь, перенесёшь на С++. Если не лень.
http://www.wasm.ru/wault/article/show/1001024
1
01.02.2015, 23:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.02.2015, 23:55

Как сделать ввод с клавиатуры?
как сделать ввод с клавиатуры( фио,возраст,бал) и как сделать цикл вода даных ...

Как сделать ввод с клавиатуры?
Подскажите, как переделать под ввод данных a и b с клавиатуры #include...

Как сделать ввод элементов массива с клавиатуры?
Всем привет. Препод пристал что бы я сделал так что пользователь задавал...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru