Salut, je commence seulement à programmer avec l'api et j'ai voulu comprendre comment créer un hook clavier basique.
J'ai lu le tutoriel http://tcharles.developpez.com/simul/#hooks et j'ai essayé de créer un keylogger basique. Mais ca ne fonctionne pas. Voici le code :
Dll
Voici ensuite le code de l'executable :
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
37
38
39
40
41 FILE *memo; HHOOK HookClavier; HINSTANCE HInst; //Procédure du Hook LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam){ // Fichier dans lequel j'enregistre les touches tappées par l'utilisateur memo = fopen("C:\\hook.txt", "a"); //if(wParam == WM_KEYDOWN){ fprintf(memo, "%c", toascii((int) lParam)); //} return CallNextHookEx(HookClavier,nCode,wParam,lParam); } // Fonction qui active le hook void ActiveHook() { HookClavier = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC) HookProc, HInst, 0); } //Désactive le hook void EndHook(){ UnhookWindowsHookEx(HookClavier); } // Fonction principale (exportée par la dll) int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ){ HInst = hInstance; int i; i = 1; ActiveHook(); while(i){ // boucle infinie. Je n'ai pas mis de condition pour la fin du hook car je n'arrive déjà pas à l'activer. } EndHook(); return 0; }
Voilà, si quelqu'un peut passer minutes pour m'engueuler pour la façon dont je code comme un sale et me dire où sont les principales erreurs, ce serait super sympa.
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 #include "stdafx.h" #include "stdlib.h" #include "windows.h" #include "windowsx.h" void main(){ typedef void (WINAPI *DLL_Function_TestFunction) (void); DLL_Function_TestFunction WinMain; // handle de la farproc de la dll HMODULE hDLL; // handle de la dll hDLL = LoadLibrary("C:\\temp\\hookClavier.dll"); WinMain = (DLL_Function_TestFunction)GetProcAddress(hDLL,"WinMain"); if (WinMain!=NULL){ // Jusque là, ca marche, et la dll est chargée, et la fonction aussi ( enfin, elles sont non-nulles ). WinMain(); system("pause"); } }
Merci.
Partager