powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Глобальный хук Windows 7 и Windows XP в чем разница?
9 сообщений из 9, страница 1 из 1
Глобальный хук Windows 7 и Windows XP в чем разница?
    #38010629
Sievs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!
Подскажите пожалуйста почему возникает следующая ситуация:

Имею рабочий код под Windows 7, который перехватывает сообщения от мыши и клавиатуры:
Заголовочный файл:
Код: plaintext
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.
#ifndef C_GLOBALHOOK_H
#define C_GLOBALHOOK_H

#include <QObject>
#include <QThread>

#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <tchar.h>

#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0400
#endif
#include <Windows.h>

LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam);

class C_GlobalHook : public QObject
{
    Q_OBJECT
    public:
        static C_GlobalHook *instance() {
            if (m_instance == NULL)
                m_instance = new C_GlobalHook();

            return m_instance;
        }

        void startHook();
        void endHook();
        bool isActive(){return m_start;}
        void emitAnyAction();

     public slots:

     private:
        C_GlobalHook(QObject *parent = 0);
        static C_GlobalHook *m_instance;

        HHOOK hhkLowLevelKybd;
        HHOOK hhkLowLevelMouse;

        bool m_start;

     signals:
        void anyAction();

};

#endif // C_GLOBALHOOK_H



Файл cpp:
Код: plaintext
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.
#include "c_globalhook.h"
#include <QDebug>

#include <QtConcurrentRun>

C_GlobalHook *C_GlobalHook::m_instance = NULL;

C_GlobalHook::C_GlobalHook(QObject *parent)
    :QObject(parent)
{
    m_start = false;
}

void C_GlobalHook::startHook()
{
    hhkLowLevelKybd =  SetWindowsHookEx(WH_KEYBOARD_LL, (LowLevelKeyboardProc), 0, 0);
    hhkLowLevelMouse = SetWindowsHookEx(WH_MOUSE_LL, (LowLevelKeyboardProc), 0, 0);

    m_start = true;
}

void C_GlobalHook::endHook()
{
     UnhookWindowsHookEx(hhkLowLevelKybd);
     UnhookWindowsHookEx(hhkLowLevelMouse);
     m_start = false;
}

void C_GlobalHook::emitAnyAction()
{
    emit anyAction();
}

LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) {
   BOOL fEatKeystroke = FALSE;

   if (nCode == HC_ACTION) {
      switch (wParam) {
      case WM_KEYDOWN:  case WM_SYSKEYDOWN:
      case WM_LBUTTONDOWN: case WM_RBUTTONDOWN:
      case WM_MOUSEWHEEL:
          //qDebug()<<"action!"<<endl;
          C_GlobalHook::instance()->emitAnyAction();
         break;
      }
   }
   return(fEatKeystroke ? 1 : CallNextHookEx(NULL, nCode, wParam, lParam));
}



При переносе exe под Windows XP приложение запускается, но никак не реагирует на события мыши и клавиатуры.
В чем может быть проблема?
...
Рейтинг: 0 / 0
Глобальный хук Windows 7 и Windows XP в чем разница?
    #38010744
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SievsВ чем может быть проблема?В первую очередь в том, что код сперт без понимания что он делает.
GetLastError() где? Зачем ты дважды виндовый заголовк грузишь? Зачем тебе тут многопоточность из кьюта? Зачем тебе C-заголовки?
Где код создания объекта и зачем это все вообще в класс обернуто?
...
Рейтинг: 0 / 0
Глобальный хук Windows 7 и Windows XP в чем разница?
    #38011330
Sheraton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И самое главное, зачем вообще в Qt использовать коллбэки? Почему бы просто не использовать Qt-шные сигналы и слоты?
...
Рейтинг: 0 / 0
Глобальный хук Windows 7 и Windows XP в чем разница?
    #38011437
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sievs,

Начните с того, что переместите этот дефайн чтобы он был до каких бы то ни было #include.
Код: plaintext
1.
2.
3.
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0400
#endif
...
Рейтинг: 0 / 0
Глобальный хук Windows 7 и Windows XP в чем разница?
    #38011448
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и заодно, 0x0400 это совместимость с Windows NT 4.0.
Я очень сомневаюсь, что ваша программа нуждается в этом.
А совместимость с такими древними версиями может выключать разные фичи которые появились позже.
Я бы оставил 0x0500 - Windows 2000 и далее
Или даже 0x0501 - XP и далее.
...
Рейтинг: 0 / 0
Глобальный хук Windows 7 и Windows XP в чем разница?
    #38012161
Sievs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Согласен с тем, что много лишних инклудов. Код вставлялся копипастом с небольшой доработкой.

Проблема немного сдвинулась с мертвой точки.
При попытке непосредственной компиляции того же проекта под windows xp
получаю ошибку что не может быть загружен kernelbase.dll
оно и понятно... там его нет... там kernel32.dll
почему же он пытается его загрузить?
...
Рейтинг: 0 / 0
Глобальный хук Windows 7 и Windows XP в чем разница?
    #38012261
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sievs,

Какой компилятор-то?
...
Рейтинг: 0 / 0
Глобальный хук Windows 7 и Windows XP в чем разница?
    #38012268
Sievs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly MoskovskySievs,

Какой компилятор-то?

Mingw
...
Рейтинг: 0 / 0
Глобальный хук Windows 7 и Windows XP в чем разница?
    #38012289
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sievs,

И что, при компиляции mingw выдает ошибку про kernelbase.dll?
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Глобальный хук Windows 7 и Windows XP в чем разница?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]