Bonjour,
Je voudrais construire une classe qui puisse initialiser un Hook et tout un tas d'autre choses, de manière à pouvoir la réutiliser dans mes applis par la suite.
Le problème est que quand je met ce code dans le main:
tout fonctionne bien, alors que quand je veut le créer dans une classe (avec séparation conventionelle dans le .h et .cpp ça bloque.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 #include <QtCore/QCoreApplication> #include <QDebug> #include <Windows.h> HHOOK hHook = NULL; using namespace std; LRESULT CALLBACK MyLowLevelKeyBoardProc(int nCode, WPARAM wParam, LPARAM lParam) { qDebug() << "Test Clavier!"; return CallNextHookEx(hHook, nCode, wParam, lParam); } int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); hHook = SetWindowsHookEx(WH_KEYBOARD_LL, MyLowLevelKeyBoardProc, NULL, 0); if(hHook == NULL) qDebug() << "Hook failed !"; return a.exec(); }
Voici mon .h:
Et mon .cpp:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 #ifndef LOWLEVELHOOK_H #define LOWLEVELHOOK_H #include <QtCore> #include <Windows.h> #include <QDebug> class LowLevelHook : public QObject { Q_OBJECT public: LowLevelHook(); private: // Attributs: HHOOK hookClavier; // Méthodes: LRESULT CALLBACK MyLowLevelKeyBoardProc(int nCode, WPARAM wParam, LPARAM lParam); }; #endif // LOWLEVELHOOK_H
Erreur sur la ligne 6 du .cpp:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 #include "lowlevelhook.h" LowLevelHook::LowLevelHook() : hookClavier(NULL) { hookClavier = SetWindowsHookEx(WH_KEYBOARD_LL, MyLowLevelKeyBoardProc, NULL, 0); if(hookClavier == NULL) qDebug() << "Hook Clavier Failed !"; } LRESULT LowLevelHook::MyLowLevelKeyBoardProc(int nCode, WPARAM wParam, LPARAM lParam) { qDebug() << "Test Clavier!"; return CallNextHookEx(hookClavier, nCode, wParam, lParam); }
error: argument of type 'LRESULT (LowLevelHook::)(int, WPARAM, LPARAM)' does not match 'LRESULT (*)(int, WPARAM, LPARAM)'
Partager