5 / 5 / 5
Регистрация: 10.03.2013
Сообщений: 139

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

01.02.2015, 14:09. Показов 3277. Ответов 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
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.02.2015, 14:09
Ответы с готовыми решениями:

Программа эмулирует нажатие клавиш клавиатуры в неактивном окне
Всем привет! Требуется написать программу которая эмулирует нажатие клавиш клавиатуры в неактивном окне, выбираю процесс, задаю допустим...

Flash в WebBrouser, генерация событий мыши и клавиатуры в неактивном окне
Доброго времени суток. Недавно у меня возникла задача: необходимо перехватывать события мыши (типа click mouseup mousedown move) и...

Как ловить колесико в неактивном окне?
Надо ловить колесико в неактивном окне (без фокуса), желать его активным нельзя... Прога на C++, только WinAPI, никаких МФЦ, ВСЛ и тому...

24
5 / 5 / 5
Регистрация: 10.03.2013
Сообщений: 139
02.02.2015, 00:37  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от kravam Посмотреть сообщение
По хукам обалденно расписано у Айзелиона, но там ассемблер. Недельки две посидишь, всё поймёшь, перенесёшь на С++. Если не лень.
http://www.wasm.ru/wault/article/show/1001024
да я с++ ток вот пол года назад начал учить(в колледже)
а тут с языка того на этот,ты чо)
0
 Аватар для Игорь с++
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
02.02.2015, 12:29
Как то так , я думаю ( по F2 выход из программы )
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#include <windows.h>
 
/*  Declare Windows procedure  */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
 
/*  Make the class name into a global variable  */
char szClassName[ ] = "WindowsApp";
 
char vk2 [1] = {0} ;
 
HWND hwnd;
 
int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil)
 
{
                   /* This is the handle for our window */
    MSG messages;            /* Here messages to the application are saved */
    WNDCLASSEX wincl;        /* Data structure for the windowclass */
 
    /* The Window structure */
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
    wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
    wincl.cbSize = sizeof (WNDCLASSEX);
 
    /* Use default icon and mouse-pointer */
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;                 /* No menu */
    wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
    wincl.cbWndExtra = 0;                      /* structure or the window instance */
    /* Use Windows's default color as the background of the window */
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
 
    /* Register the window class, and if it fails quit the program */
    if (!RegisterClassEx (&wincl))
        return 0;
 
    /* The class is registered, let's create the program*/
    hwnd = CreateWindowEx (
           0,                   /* Extended possibilites for variation */
           szClassName,         /* Classname */
           "Windows App",       /* Title Text */
           WS_OVERLAPPEDWINDOW, /* default window */
           CW_USEDEFAULT,       /* Windows decides the position */
           CW_USEDEFAULT,       /* where the window ends up on the screen */
           544,                 /* The programs width */
           375,                 /* and height in pixels */
           HWND_DESKTOP,        /* The window is a child-window to desktop */
           NULL,                /* No menu */
           hThisInstance,       /* Program Instance handler */
           NULL                 /* No Window Creation data */
           );
 
    /* Make the window visible on the screen */
    ShowWindow (hwnd, nFunsterStil);
 
    /* Run the message loop. It will run until GetMessage() returns 0 */
    while (GetMessage (&messages, NULL, 0, 0))
    {
        /* Translate virtual-key messages into character messages */
        TranslateMessage(&messages);
        /* Send message to WindowProcedure */
        DispatchMessage(&messages);
    }
 
    /* The program return-value is 0 - The value that PostQuitMessage() gave */
    return messages.wParam;
}
 
 
/*  This function is called by the Windows function DispatchMessage()  */
LRESULT CALLBACK LLKeyProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    if(nCode == HC_ACTION)
    {
        DWORD vk = ((LPKBDLLHOOKSTRUCT)lParam)->vkCode;
 
if (wParam==WM_KEYDOWN){
 
if(vk == 0x71)
        {
 
              MessageBox(hwnd,"Âû âûøëè èç ïðîãðàììû","",MB_OK);
            PostQuitMessage(0);
 
}
 
 vk2[0]=CHAR(vk);
 
 MessageBox(hwnd,vk2,"",MB_OK);
 
}
 
}
 
    return CallNextHookEx(NULL, nCode, wParam, lParam);
 
}
 
 
 
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
        
        HHOOK hook;
    
    switch (message)                  /* handle the messages */
{
 
case WM_CREATE:
 
 
     hook = SetWindowsHookEx(WH_KEYBOARD_LL, LLKeyProc, GetModuleHandle(NULL), 0);
 
 
     break;
 
        case WM_DESTROY:
            PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
            break;
        default:                      /* for messages that we don't deal with */
            return DefWindowProc (hwnd, message, wParam, lParam);
    }
 
    return 0;
}
1
5 / 5 / 5
Регистрация: 10.03.2013
Сообщений: 139
02.02.2015, 14:15  [ТС]
Цитата Сообщение от Игорь с++ Посмотреть сообщение
( по F2 выход из программы )
А где в коде написать чтоб в том окне что создается был текст,найти не могу

Добавлено через 14 минут
Вот это кодище блин,пытаюсь вбить цикл (do while или for ошибок куча выдает)

А можно этот код до минимума?чтоб циклы хотяб мог делать,или это и есть минимум

Добавлено через 2 минуты
в общем осталось ток как сделать цикл в нем,остальное немного понял

Добавлено через 3 минуты
и еще одно wincl.lpszMenuName = NULL; как меню сделать,заместь null написать свое имя и каким образом его вбить в прогу

Добавлено через 21 минуту
Все порешал,осталось только одно,как сделать чтоб когда кнопки нажимаешь их не выводило на экран,а выводило ток ф2
0
 Аватар для Игорь с++
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
02.02.2015, 14:47
Цитата Сообщение от Nice-crazy Посмотреть сообщение
Все порешал,осталось только одно,как сделать чтоб когда кнопки нажимаешь их не выводило на экран,а выводило ток ф2
Вот этот кусок должен быть таким
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
LRESULT CALLBACK LLKeyProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    if(nCode == HC_ACTION)
    {
        DWORD vk = ((LPKBDLLHOOKSTRUCT)lParam)->vkCode;
 
if (wParam==WM_KEYDOWN){
 
if(vk == 0x71)
        {
 
              MessageBox(hwnd,"Âû âûøëè èç ïðîãðàììû","",MB_OK);
            PostQuitMessage(0);
 
}
 
 
 
}
 
}
 
    return CallNextHookEx(NULL, nCode, wParam, lParam);
 
}
1
5 / 5 / 5
Регистрация: 10.03.2013
Сообщений: 139
02.02.2015, 22:24  [ТС]
А как сделать чтоб в том появившем окне был написан мой текст(windows app)

Добавлено через 26 минут
все нашел)
C++
1
2
     CreateWindow(TEXT("STATIC"),TEXT("Тут текст"),WS_VISIBLE | WS_CHILD,
      10,10,100,25,hwnd,(HMENU)NULL,NULL,NULL);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.02.2015, 22:24
Помогаю со студенческими работами здесь

События в неактивном окне (в окне без фокуса)
Делаю для себя программу, которая будет отображать нажатия определенных клавиш. Например, во время игры. Для примера сделал окно с...

Как сделать так, когда я ввожу информацию в окне 2, то она появлялась в главном окне тобишь в окне 1?
В общем нужно создать просто приложение по типу инсталятора с кнопками далее или назад. И я ввожу информацию в textbox допустим и она...

Работа в неактивном окне
Народ, подскажете как, ну или ссылку на информацию дайте, как можно сделать следующее: заставить программу работать даже тогда, когда окно...

Клик в неактивном окне
всем привет,помогите плиз,не пойму в чём дело F1 в неактивном окне нажимает,а по координатам не клацает=(,не пойму,что не так... ...

Нажатие клавиш в неактивном окне
Здравствуйте. Есть окно, оно не активно. Нужно программно послать нажатие какой-то клавиши, например Пробела, не делая окно активным


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

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

Новые блоги и статьи
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
Модель здравосохранения 17. Планы на выгорание
anaschu 23.05.2026
Вот конкретная схема реализации: В классе Работник добавить: накопленнаяУсталость — растёт каждый час работы, снижается в перерывы и болезни коэффициентПрезентеизма — снижает продуктивность. . .
Изменение цветов в палитре gif файла aka фавикона
russiannick 23.05.2026
Изменение цветов в палитре gif файла, юзаемого как фавиконка в составе html-файла, помещенная в base64, средствами нативного Java Script, навеянное сном в майский день. Для работы необходим браузер,. . .
Модель здравосохранения 16. Слишком хорошие и здоровые сотрудники уходят, недовольные зарплатой
anaschu 23.05.2026
Отладка увольнений и настройка производительности Сегодня во второй половине дня разобрались с механикой увольнений и настроили коэффициент сложности заданий. Вот что было сделано. . . .
Как я стал коммунистом))) Модель сохранения здоровья сотрудников, запись блога номер 15
anaschu 23.05.2026
Внезапно хорошее здоровье сотрудников не нужно капиталистам?))
Модель здравоСохранения 15. Как мы чинили AnyLogic модель рабочего коллектива: сочленение диаграммы состояний болезней и поломок в ресурспул
anaschu 23.05.2026
Как мы чинили AnyLogic модель рабочего коллектива Сегодня разобрались с пятью багами, из-за которых модель либо падала с ошибкой, либо давала совершенно бессмысленные результаты. Каждый баг был. . .
Диалоги с ИИ
zorxor 23.05.2026
Насколько я понимаю - Вы - Искусственный Интеллект. Это так? Да, всё верно. Я — искусственный интеллект. Я представляю собой большую языковую модель, созданную для помощи в самых разных задачах. . . .
Модель здравосохранения 14. Собираем всю модель вместе.
anaschu 22.05.2026
Модель собрана. В будущих постах на видео я покажу, как она работает. В этом посте запускаем её, проверяем результаты и разбираем что можно с ней делать дальше. Перед запуском проверяем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru