Hooks sur Thread [Résolu]

Signaler
Messages postés
140
Date d'inscription
mercredi 28 avril 2004
Statut
Membre
Dernière intervention
21 juillet 2005
-
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
-
Bonjour,

Dans une Dll, j'ai un Hook que j'ai déclaré ainsi :
Donnees->HookHandle2 = SetWindowsHookEx(WH_CALLWNDPROCRET,(HOOKPROC)CallWndRetProc,HInst,0);
Tout fonctionne bien.

Ce Hook détecte des évènements que sur le bureau.
Dans un esprit d'optimisation, je désire initialiser ce hook que sur le Thread du bureau et non sur tous les threads :
DWORD ThreadId,ProcessId;
ThreadId=GetWindowThreadProcessId(FindWindow(_T("Progman"),NULL),&ProcessId);
Donnees->HookHandle2 = SetWindowsHookEx(WH_CALLWNDPROCRET,(HOOKPROC)CallWndRetProc,0,ThreadId);

Mais ce code n'a pas l'air de fonctionner.
Savez-vous pourquoi ?

4 réponses

Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
Salut,
Pourquoi tu passes 0 au 3eme param de SetWindowsHookEx lors du 2eme appel ? il faut passer le HINSTANCE de la dll qui contient le hook.
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
Salut,
C'est dit dans le passage que tu as copié/collé de MSDN: si le thread a hooker est dans ton processus, pas besoin de DLL.
Par contre pour tout ce qui est dans un autre processus, que ca soit hook global de tout des thread ou hook d'un seul thread, la DLL est obligatoire (et donc le HINSTANCE).
Messages postés
140
Date d'inscription
mercredi 28 avril 2004
Statut
Membre
Dernière intervention
21 juillet 2005

J'ai fait les 2 solutions sans succès.

hMod :
Identifies the DLL containing the hook procedure pointed to by the lpfn parameter. The hMod parameter must be set to NULL if the dwThreadId parameter specifies a thread created by the current process and if the hook procedure is within the code associated with the current process.
Messages postés
140
Date d'inscription
mercredi 28 avril 2004
Statut
Membre
Dernière intervention
21 juillet 2005

C'est malin. En fait ça marche maintenant. (???)
Tu avais raison, il faut bien mettre le HINSTANCE de la dll en 3eme paramètre. Merçi mille fois.
Désolé. :blush)