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:

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();
}
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.

Voici mon .h:

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
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
 
#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);
}
Erreur sur la ligne 6 du .cpp:

error: argument of type 'LRESULT (LowLevelHook::)(int, WPARAM, LPARAM)' does not match 'LRESULT (*)(int, WPARAM, LPARAM)'