Hooks sur Thread

Résolu
larion Messages postés 140 Date d'inscription mercredi 28 avril 2004 Statut Membre Dernière intervention 21 juillet 2005 - 18 sept. 2004 à 15:43
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 - 18 sept. 2004 à 17:39
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

cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
18 sept. 2004 à 16:51
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.
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
18 sept. 2004 à 17:39
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).
larion Messages postés 140 Date d'inscription mercredi 28 avril 2004 Statut Membre Dernière intervention 21 juillet 2005
18 sept. 2004 à 17:24
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.
larion Messages postés 140 Date d'inscription mercredi 28 avril 2004 Statut Membre Dernière intervention 21 juillet 2005
18 sept. 2004 à 17:31
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)
Rejoignez-nous