Bonjour à tous.

Je souhaite faire un hook clavier d'un seul processus. Pour cela je me suis documenté sur les pages suivantes: http://tcharles.developpez.com/simul/ et sur MSDN.

Je pense avoir compris le principe mais j'ai cependant une erreur lors de l'exécution:
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
26
27
28
29
30
31
32
33
34
35
36
void hookClavier() {
 
    HWND hWindow;
    DWORD threadID;
    HHOOK clavier;
 
    hWindow=GetForegroundWindow(); // On recupere le handle de la fenetre au premier plan
    printf("le handle de la fenetre au premier plan est : 0x%X\n",hWindow);
 
    GetWindowThreadProcessId(hWindow,&threadID); // on recupere l'id du thread de la fenetre au premier plan depuis son handle
    printf("l'id est %u\n",threadID);
 
    clavier=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC) &routineITClavier,NULL,threadID); // on met en place le hook
 
    if(clavier!=NULL)
        printf("Hook en place!! \n");
    else {
        printf("Le hook n'est pas en place!!\n");
        hWindow=(HWND) GetLastError(); // On recupere la derniere erreur
        printf("L'erreur est %u\n",hWindow);
    }
 
    UnhookWindowsHookEx(clavier); // on retire le hook
}
 
 
 
 
 
LRESULT CALLBACK routineITClavier(int nCode, WPARAM wParam, LPARAM lParam) {
 
    printf("Une touche a ete pressee.\n");
 
    return CallNextHookEx(NULL, nCode, wParam, lParam);
 
}


Lors de l'exécution le programme affiche bien le handle et l'id, puis m'affiche ensuite une belle erreur 0x57.

D'après cette page http://msdn.microsoft.com/en-us/libr...=VS.85%29.aspx l'erreur correspond à un paramètre invalide.


Je précise que j'ai seulement 3 warning à la compilation (concernant les printf), que je suis sous Windows XP pro et que j'utilise code blocks 8.02.

Si quelqu'un à une réponse, un lien ou une piste, je lui en serais reconnaissant.

Merci de votre lecture.


Mogg41