Bonjour,
Tous les exemples que j'ai trouvés jusqu'à présent montrent comment poser des hook "généraux" de type WH_KEYBOARD
donc sur tous les processus chargés.
Or, et à titre pédagogique, je souhaite placer un hook de type "WH_CALLWNDPROC" sur une seule fenêtre et dans un seul processus
afin de connaître les messages qu'elle reçoit ( un peu comme SPY++ ).
Et bien sûr, je n'y arrive pas. Ma dll de hook ne reçoit rien. Il n'y a pas d'erreur quand je trace en pas à pas le déroulement.
Ma cible : processus = explorer, fenêtre = Shell_TrayWnd
Pour poser le hook, je procède ainsi ( un extrait de mon code ):

Code C : 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
// trouver la fenêtre pour laquelle je veux placer le hook
HWND hShellTray = FindWindow(L"Shell_TrayWnd", NULL);
// trouver son thread associé pour que le hook s'applique uniquement à ce thread
DWORD tid = GetWindowThreadProcessId(hShellTray, &pid);
// charger la dll de hook ( quel autre but que connaître l'adresse de la fonction de hook ? )
HMODULE dll = LoadLibrary(lpFullPath);
// obtenir l'adresse de la fonction de hook
HOOKPROC addr = (HOOKPROC)GetProcAddress(dll, "meconnect");
// appeler l'API pour poser ce hook
hHook = SetWindowsHookEx(WH_CALLWNDPROC, addr, dll, tid);
// attendre une action de l'utilisateur pour annuler le hook et décharger la dll ( peut on ne pas attendre ? )
 
Ma dll de hook :
//ne rien faire d'autre qu'écrire dans un fichier de log
extern "C" __declspec(dllexport) int meconnect(int code, WPARAM wParam, LPARAM lParam) {
	FILE *file;
	LPCWPSTRUCT pt_stMessage = (LPCWPSTRUCT)lParam;
	if (code >= 0 )
	{
		if (pt_stMessage->message == 0x579 && pt_stMessage->wParam == 3)
		{
			fopen_s(&file, "C:\\temp\\hook_function.txt", "a+");
			//fprintf(file, "Function keyboard_hook called avec code=0x%x\n", code);
			fprintf(file, "Function keyboard_hook called \n");
			fclose(file);
		}
	}
	return(CallNextHookEx(NULL, code, wParam, lParam));
}

Nouvel Edit : Avec windbg et si je l'attache au processus explorer.exe je ne vois pas ma dll de hook. A quel moment cette dll sera t-elle chargée par explorer.exe?
Merci d'avance.

Ps : je ne sais pas si la totalité du code peut vous être utile?
Ps : je ne sais pas si je dois poster dans le forum C ou C++ ?