Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 29.10.2015
Сообщений: 72
1

В чём ошибка? HHOOK

29.10.2015, 21:04. Показов 1776. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Почему не срабатывает этот код???
Окно консоли запускается,но действий кода нет.

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
// ConsoleApplication3.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include "Windows.h"
 
#define WMH_KEYBOARD_LL = 13;
 
 
 
HHOOK kbh = 0;
 
LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam)
 
{
 
    if (code <  0)
 
        return 1;
 
}
int _tmain(int argc, _TCHAR* argv[])
{
    if (kbh = 0)
 
        kbh = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardProc, NULL, NULL);
    
    system("PAUSE");
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.10.2015, 21:04
Ответы с готовыми решениями:

HHOOK перехватывает только английские клавиши
Почему данная программа перехватывает только код английских клавиш вне зависимости от текущей...

Ошибка method range of object global failed в чем ошибка
Sub ПроверкаВвода() Dim A As Range Dim B As Range ...

Выскакивает ошибка Stack around the voriable 'text' was corrupted. Подскажите пожалуйста в чём ошибка
Выскакивает ошибка Stack around the voriable 'text' was corrupted. Подскажите пожалуйста в чём...

Ошибка при передаче параметров в функцию. Объясните, ребят, пожалуйста, в чем ошибка
Есть функция, которую необходимо отобразить в виде линий уровня. Далее с помощью простого...

18
7796 / 6562 / 2985
Регистрация: 14.04.2014
Сообщений: 28,699
29.10.2015, 21:40 2
А где действия?
1
Модератор
Эксперт С++
13508 / 10758 / 6412
Регистрация: 18.12.2011
Сообщений: 28,725
29.10.2015, 21:45 3
Лучший ответ Сообщение было отмечено Grushkin как решение

Решение

Цитата Сообщение от Grushkin Посмотреть сообщение
if (kbh = 0)
kbh присваивается нуль, соответственно приведение этого нуля к bool дает ложь и Set.... пропускается
1
0 / 0 / 0
Регистрация: 29.10.2015
Сообщений: 72
01.11.2015, 13:03  [ТС] 4
Всем спасибо.
Разобрался я с этим кодом.
А как удалить эту ловушку?
Вернее с помошью функции UnhookWindowsHookEx.
создаю отдельный проэкт ,в нём пишу код аналогичный который выше...но хук не удаляется.
0
0 / 0 / 0
Регистрация: 29.10.2015
Сообщений: 72
03.11.2015, 12:43  [ТС] 5
Моя тема.
Буду в этой теме задавать свои вопросы.
Создал окно с кнопкой.
Хочу создать ещё одну кнопку,создаю ещё один Иедетификатор кнопки ID_BUTTON создаю переменную ещё static HWND button
но кнопка почему то не создаётся ещё одна.
Дайте пожалуйста пример с двумя кнопками,и в обще опишите в коду где и что куда вставлять что бы что то создать какой то компонент.
У меня всё спасибо.
0
7796 / 6562 / 2985
Регистрация: 14.04.2014
Сообщений: 28,699
03.11.2015, 14:31 6
Ты как её создаёшь-то? Через функцию или форма в ресурсах описана?
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
03.11.2015, 20:19 7
Цитата Сообщение от Grushkin Посмотреть сообщение
Моя тема.
Буду в этой теме задавать свои вопросы.
Не советую. По правилам форума, один вопрос - одна тема.
0
0 / 0 / 0
Регистрация: 29.10.2015
Сообщений: 72
04.11.2015, 15:38  [ТС] 8
Цитата Сообщение от nmcf Посмотреть сообщение
Ты как её создаёшь-то? Через функцию или форма в ресурсах описана?
Через функцию.
Но она почему не создаётся 2-ая кнопка.
Цитата Сообщение от castaway Посмотреть сообщение
Не советую. По правилам форума, один вопрос - одна тема.
Извиняюсь,учту исправлюсь.
0
7796 / 6562 / 2985
Регистрация: 14.04.2014
Сообщений: 28,699
04.11.2015, 15:50 9
Программу показывай.
0
0 / 0 / 0
Регистрация: 29.10.2015
Сообщений: 72
04.11.2015, 16:14  [ТС] 10
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
[SPOILER]#include <windows.h>
//Идентификаторы кнопок 
#define ID_BUTTON1 102
//Прототипы функций
LRESULT CALLBACK WndProc(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);//прототип функции окна
//using namespace std;
 
 
//Глобальные переменные
HINSTANCE  hInst;//дескриптор экземпляра приложения
HGLRC      hRC=NULL;// Постоянный контекст рендеринга
HDC        hDC=NULL;// Приватный контекст устройства GDI
HWND       hWnd,hWM;//дескрипторы окон (главное,вывода)
 
//////////////////////////////////////////////////
//      Функция создания кнопок    //
//////////////////////////////////////////////////
bool CreateButton(HWND hWnd)
{
    static HWND hButton;
    hButton=CreateWindow("button","Нажми меня!!!",WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,0,0,300,60,hWnd,(HMENU)ID_BUTTON1,hInst,NULL);
return 0;
}
 
 
 
//////////////////////////////////////////////
//      Регистрация класса окна программы //
//////////////////////////////////////////////
int RegClassWin(WNDPROC Proc,LPCTSTR szName,UINT FonColor)//функция описания класса главное окно
{
    WNDCLASS wc;
    wc.style=CS_HREDRAW | CS_VREDRAW;
    wc.cbClsExtra=0;
    wc.cbWndExtra=0;
    wc.lpfnWndProc=Proc;
    wc.hInstance=hInst;
    wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
    wc.hCursor=LoadCursor(NULL,IDC_ARROW);
    wc.hbrBackground=(HBRUSH)(FonColor);
    wc.lpszMenuName=NULL;
    wc.lpszClassName=szName;
return RegisterClass(&wc);
}
 
//////////////////////////////
//      Функция окна     //
//////////////////////////////
LRESULT CALLBACK WndProc(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam)
{
    
    PAINTSTRUCT PaintStruct;
    switch (Msg)//Обработка сообщений окна
        {
        case WM_PAINT:
            {
                BeginPaint(hWnd,&PaintStruct);
                EndPaint(hWnd,&PaintStruct);
            break;
            }
        case WM_COMMAND:
            {
            switch (LOWORD(wParam))
                {
                case ID_BUTTON1:
                    {
                        MessageBox(NULL,"Сообщение!!!","Зачем нажал???",MB_OK);
            //реакция на кнопку (здесь прописываем функции которые будут выполнятся при нажатии клавиши)
                    break;
                    }
                }
            }
        case WM_DESTROY:
            {
            PostQuitMessage(0);
            break;  
            }
        }
return DefWindowProc(hWnd,Msg,wParam,lParam);
}
 
 
//////////////////////////////////////////////////
//          Главная функция программы            //
//////////////////////////////////////////////////
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine, int nShowCmd)
{
    MSG Msg;//Структура сообщения
    //Создание главного окна программы (WinAPI)
    if (!RegClassWin(WndProc,"MainWin",1)) return FALSE;
    hWnd = CreateWindow("MainWin","Программа с кнопкой",WS_OVERLAPPEDWINDOW,500,0,300,98,0,0,hInstance,NULL);
    if (!hWnd) return FALSE;
    //Вывод окон и элентов управления
    ShowWindow(hWnd,SW_SHOW);
    ShowWindow(hWM,SW_SHOW);
    CreateButton(hWnd);//Вывод кнопок управления
    //Главный цикл обработки сообщений
    while(GetMessage(&Msg,0,0,0))
        {
            TranslateMessage(&Msg);//Обработчик сообщений от клавиатуры
            DispatchMessage(&Msg);//
        }
return Msg.wParam;//Возвращение результата
}[/SPOILER]
Добавлено через 1 минуту
Цитата Сообщение от nmcf Посмотреть сообщение
Программу показывай.
Можете указать в коде как создать вторую кнопку???
0
7796 / 6562 / 2985
Регистрация: 14.04.2014
Сообщений: 28,699
04.11.2015, 16:30 11
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
#include <windows.h>
//Идентификаторы кнопок 
#define ID_BUTTON1 102
#define ID_BUTTON2 103
//Прототипы функций
LRESULT CALLBACK WndProc(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);//прототип функции окна
//using namespace std;
 
 
//Глобальные переменные
HINSTANCE  hInst;//дескриптор экземпляра приложения
HGLRC      hRC=NULL;// Постоянный контекст рендеринга
HDC        hDC=NULL;// Приватный контекст устройства GDI
HWND       hWnd,hWM, hButton1, hButton2; //дескрипторы окон (главное,вывода)
 
//////////////////////////////////////////////
//      Регистрация класса окна программы   //
//////////////////////////////////////////////
int RegClassWin(WNDPROC Proc,LPCTSTR szName,UINT FonColor)//функция описания класса главное окно
{
    WNDCLASS wc;
    wc.style=CS_HREDRAW | CS_VREDRAW;
    wc.cbClsExtra=0;
    wc.cbWndExtra=0;
    wc.lpfnWndProc=Proc;
    wc.hInstance=hInst;
    wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
    wc.hCursor=LoadCursor(NULL,IDC_ARROW);
    wc.hbrBackground=(HBRUSH)(FonColor);
    wc.lpszMenuName=NULL;
    wc.lpszClassName=szName;
return RegisterClass(&wc);
}
 
//////////////////////////////
//      Функция окна        //
//////////////////////////////
LRESULT CALLBACK WndProc(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam)
{
    
    PAINTSTRUCT PaintStruct;
    switch (Msg)//Обработка сообщений окна
        {
        case WM_PAINT:
            {
                BeginPaint(hWnd,&PaintStruct);
                EndPaint(hWnd,&PaintStruct);
            break;
            }
        case WM_COMMAND:
            {
            switch (LOWORD(wParam))
                {
                case ID_BUTTON1:
                    {
                        MessageBox(NULL,"Сообщение!!!","Зачем нажал???",MB_OK);
            //реакция на кнопку (здесь прописываем функции которые будут выполнятся при нажатии клавиши)
                    break;
                    }
                }
            }
        case WM_DESTROY:
            {
            PostQuitMessage(0);
            break;  
            }
        }
return DefWindowProc(hWnd,Msg,wParam,lParam);
}
 
 
//////////////////////////////////////////////////
//          Главная функция программы           //
//////////////////////////////////////////////////
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine, int nShowCmd)
{
    MSG Msg;//Структура сообщения
    //Создание главного окна программы (WinAPI)
    if (!RegClassWin(WndProc,"MainWin",1)) return FALSE;
    hWnd = CreateWindow("MainWin","Программа с кнопкой",WS_OVERLAPPEDWINDOW,500,0,300,98,0,0,hInstance,NULL);
    if (!hWnd) return FALSE;
    //Вывод окон и элентов управления
    ShowWindow(hWnd,SW_SHOW);
    ShowWindow(hWM,SW_SHOW);
 
    hButton1 = CreateWindow("button","Нажми меня!!!",WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,0,0,300,60,hWnd,(HMENU)ID_BUTTON1,hInst,NULL);
    hButton2 = CreateWindow("button","Нажми меня!!!",WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,100,0,300,60,hWnd,(HMENU)ID_BUTTON2,hInst,NULL);
 
    //Главный цикл обработки сообщений
    while(GetMessage(&Msg,0,0,0))
        {
            TranslateMessage(&Msg);//Обработчик сообщений от клавиатуры
            DispatchMessage(&Msg);//
        }
return Msg.wParam;//Возвращение результата
}
1
0 / 0 / 0
Регистрация: 29.10.2015
Сообщений: 72
04.11.2015, 17:08  [ТС] 12
Получается функция создание кнопок была не нужна???
0
7796 / 6562 / 2985
Регистрация: 14.04.2014
Сообщений: 28,699
04.11.2015, 17:17 13
Ну это ты скажи, ты же её придумал. Если делать универсальную функцию, то придётся много параметров передавать - координаты в первую очередь. Проще так.
0
0 / 0 / 0
Регистрация: 29.10.2015
Сообщений: 72
05.11.2015, 21:09  [ТС] 14
При нажатие кнопки происходит действие.
При нажатие на второю кнопку не происходит действий,как сделать действие при нажатие на второю кнопку.
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
LRESULT CALLBACK WndProc(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam)
{
    
    PAINTSTRUCT PaintStruct;
 
    switch (Msg)//Обработка сообщений окна
    {
    case WM_PAINT:
    {
 
        BeginPaint(hWnd, &PaintStruct);
        EndPaint(hWnd, &PaintStruct);
        break;
    }
    case WM_COMMAND:
    {
        switch (LOWORD(wParam))
 
        {
        case ID_BUTTON1:
        {
            MessageBox(NULL, "Нажми", "Нажал", MB_OK);
            //По нажатию Этой кнопки происходят действия,получается)))
 
            
 
            break;
        }
        case WM_COMMAND:
        {
            switch (LOWORD(wParam))
            {
            case ID_BUTTON2:
            {
                
                MessageBox(NULL, "Нажми", "Действий нет", MB_OK);
                //По нажатию этой кнопки действий нет,что не так делаю???
                break ;
            }
            case WM_DESTROY:
            {
                PostQuitMessage(0);         break;
            }
            }
            return DefWindowProc(hWnd, Msg, wParam, lParam);
        }
По нажатию 2-ой кнопки действий нет,что делаю не так???
0
7796 / 6562 / 2985
Регистрация: 14.04.2014
Сообщений: 28,699
05.11.2015, 22:52 15
Зачем ты каскад сделал? WM_COMMAND один раз, а в нём все кнопки. Добавь ID_BUTTON2 в тот же switch(), что ID_BUTTON1.
0
0 / 0 / 0
Регистрация: 29.10.2015
Сообщений: 72
05.11.2015, 23:08  [ТС] 16
Цитата Сообщение от nmcf Посмотреть сообщение
Зачем ты каскад сделал? WM_COMMAND один раз, а в нём все кнопки. Добавь ID_BUTTON2 в тот же switch(), что ID_BUTTON1.
Сделал всё так как сказали,но эфекта нет.
0
7796 / 6562 / 2985
Регистрация: 14.04.2014
Сообщений: 28,699
05.11.2015, 23:16 17
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
LRESULT CALLBACK WndProc(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam)
{
    
    PAINTSTRUCT PaintStruct;
 
    switch (Msg)//Обработка сообщений окна
    {
    case WM_PAINT:
    {
 
        BeginPaint(hWnd, &PaintStruct);
        EndPaint(hWnd, &PaintStruct);
        break;
    }
    case WM_COMMAND:
    {
        switch (LOWORD(wParam))
        {
        case ID_BUTTON1:
        {
            MessageBox(NULL, "Нажми", "Нажал", MB_OK);
            //По нажатию Этой кнопки происходят действия,получается)))
            break;
        }
        case ID_BUTTON2:
            {
                
                MessageBox(NULL, "Нажми", "Действий нет", MB_OK);
                //По нажатию этой кнопки действий нет,что не так делаю???
                break ;
            }
        }
    }
    case WM_DESTROY:
            {
                PostQuitMessage(0);
                break;
            }
    }
 
    return DefWindowProc(hWnd, Msg, wParam, lParam);
}
1
0 / 0 / 0
Регистрация: 29.10.2015
Сообщений: 72
05.11.2015, 23:32  [ТС] 18
Большое Спасибо )
Остальные компоненты так же создавать как и кнопки ,ID_EDIT Это поле для ввода???
0
7796 / 6562 / 2985
Регистрация: 14.04.2014
Сообщений: 28,699
05.11.2015, 23:43 19
Эти константы ID_ ты сам задаёшь, имена могут быть и другими. В CreateWindow() первый параметр указывает, какой элемент создаётся.
1
05.11.2015, 23:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.11.2015, 23:43
Помогаю со студенческими работами здесь

Ошибка -is not a valid integer value (не является допустимым целым значением), не понимаю в чем ошибка
//--------------------------------------------------------------------------- #include &lt;vcl.h&gt;...

В чем ошибка?По одной строке нормально в базу заходят,а две сразу вылетает ошибка?
INSERT INTO `jos_menu` (`id`, `menutype`, `name`, `alias`, `link`, `type`, `published`, `parent`,...

Реализовать через тип данных структура. При сборке и отладки возникает ошибка. В чем ошибка?
С++ в таблице из 5 строк хранятся данные о товарах: наименование, цена, количество. Определить и...

Ошибка 2 error LNK2019, не пойму в чем ошибка
Выдает такую ошибку: Ошибка 2 error LNK2019: ссылка на неразрешенный внешний символ &quot;int __cdecl...


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

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