sheorogath
Messages postés2448Date d'inscriptionsamedi 21 février 2004StatutMembreDernière intervention29 janvier 2010
-
3 juin 2007 à 14:51
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019
-
3 juin 2007 à 20:15
Bonjour,
m'etant remis au C++ pour une enieme fois j'ai reussi a trouver quelques chose d'interressant a faire : les hook
je sais que c'est un peu ambitieu mais bon ...
pour commencer j'ai recuperer toute sorte de source et de tuto
ma question concerne ce qui a ete utilise dans une source :
SetPropA(GetDesktopWindow(),
"VISIO_HOOK_CBT", destination);
// Association du handle du programme appellant au Handle du bureau windows pour le hook CBTje sais que SetPropA sert a fixe des propriete mais je comprend pas comment ... je ne vois pas a quoi ca pourrais servir ici?
car que se soit dans le code de la dll ou dans celui de l'executable je ne vois aucun appel a GetPropA donc je trouve bizarre quand je fais ca :
// SetPropA(GetDesktopWindow(), "VISIO_HOOK_CBT", destination); // Association du handle du programme appellant au Handle du bureau windows pour le hook CBThookCbt = SetWindowsHookEx(WH_CBT, (HOOKPROC)CbtHookCallback, appInstance, threadID);
// Mise en place du hook CBT
// SetPropA(GetDesktopWindow(), "VISIO_HOOK_SHELL", destination); // Association du handle du programme appellant au Handle du bureau windows pour le hook SHELLhookShell = SetWindowsHookEx(WH_SHELL, (HOOKPROC)ShellHookCallback, appInstance, threadID);
// Mise en place du hook SHELLca ne marche pas ..
sur la msdn je ne trouve rien sur propA , j(utilise la version express de VSC++ 2005
merci d'avance pour vos explication
"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 3 juin 2007 à 15:12
Salut,
Moi je vois un appel a GetPropA() dans chaque callback de hook.
Mais je trouve que c'est quand meme plus joli (et plus rapide) de
mettre les deux HHOOK en global, dans une section shared, comme on le
fait généralement.
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 3 juin 2007 à 15:27
Salut,
Le truc c'est que tu as besoin d'avoir le HHOOK dans la callback du
hook, pour pouvoir appeler CallNextHook(). Or cette callback peut etre
appelée dans le contexte de n'importe quel processus, et donc il faut
que le HHOOK soit global au systeme (et non pas simplement global a la
dll). L'auteur de la source associe donc ce HHOOK a une fenetre qui ne
risque pas d'etre détruite pendant la durée de vie du hook, il a choisi
la fenetre du desktop, mais ca doit aussi marcher avec la fenetre de la
taskbar ou le bouton 'démarrer' de windows...
Pour GetProp et SetProp, c'est bien dans msdn, c'est une api d'user32.
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 3 juin 2007 à 16:14
Salut,
Pour le coup du SendNotifyMessage je peux pas trop t'aider je comprend pas bien le code managé.
Par contre je viens de mieux regarder le code du hook, et c'est pas les
HHOOK qu'il sauve avec SetProp mais le HWND de destination (de la
fenetre qui va recevoir tout les infos recoltés par le hook). Sur le
principe ca ne change rien, il se sert bien de la fenetre pour pouvoir
retrouver les HWND facilement depuis n'importe quel instance de la dll
de hook. Par contre, je ne vois aucun systeme similaire pour retrouver
les HHOOK, et je trouve pas ca tres propre, ca les HHOOK ne seront pas
valides dans les autres processus et donc le CallNextHookEx echouera a
coup sur).
sheorogath
Messages postés2448Date d'inscriptionsamedi 21 février 2004StatutMembreDernière intervention29 janvier 201017 3 juin 2007 à 14:53
remise en forme :
Bonjour,
m'etant remis au C++ pour une enieme fois j'ai reussi a trouver quelques chose d'interressant a faire : les hook
je sais que c'est un peu ambitieu mais bon ...
pour commencer j'ai recuperer toute sorte de source et de tuto
ma question concerne ce qui a ete utilise dans une source :
SetPropA(GetDesktopWindow(),
"VISIO_HOOK_CBT", destination); // Association du handle du programme appellant au Handle du bureau windows pour le hook CBT
je sais que SetPropA sert a fixe des propriete mais je comprend pas comment ... je ne vois pas a quoi ca pourrais servir ici?
car que se soit dans le code de la dll ou dans celui de l'executable je ne vois aucun appel a GetPropA donc je trouve bizarre quand je fais ca :
// SetPropA(GetDesktopWindow(), "VISIO_HOOK_CBT", destination); // Association du handle du programme appellant au Handle du bureau windows pour le hook CBT
hookCbt = SetWindowsHookEx(WH_CBT, (HOOKPROC)CbtHookCallback, appInstance, threadID);
// Mise en place du hook CBT
// SetPropA(GetDesktopWindow(), "VISIO_HOOK_SHELL", destination); // Association du handle du programme appellant au Handle du bureau windows pour le hook SHELL
hookShell = SetWindowsHookEx(WH_SHELL, (HOOKPROC)ShellHookCallback, appInstance, threadID);
// Mise en place du hook SHELL
ca ne marche pas ..
sur la msdn je ne trouve rien sur propA , j(utilise la version express de VSC++ 2005
sheorogath
Messages postés2448Date d'inscriptionsamedi 21 février 2004StatutMembreDernière intervention29 janvier 201017 3 juin 2007 à 15:53
ok pour les deux fonctions , je m'attendais au termes exact (sale habitude du java)
tu m'as bien aide je m'attendais pas a ce que ce soit pour ca ...
en gros pour synthetiser :
les Set/GetProp servent a stocker des propriete a une fenetre quelconque la dans notre exemple dans la "fenetre" du bureau windows on cree une propriete contenant le HHook du programme qui a appele cette DLL et tout cela d'apres ce que je vois du code pour pouvoir envoyer un message au programme :
HWND destination = (HWND)GetPropA(GetDesktopWindow(), "VISIO_HOOK_SHELL"); // Récupération du handle de destination
SendNotifyMessage(destination, msg, wparam, lparam); // Envois du message au handle de destination
apres nous avons un appel a CallNextHookEx et d'apres la msnd j'en comprend que c'est pour "relancer" le hook apres avoir traiter l'information passe donc dans notre cas , avoir envoyer un message a l'application gerant le hook
je me trompe ?
sinon une derniere question me viens ... :$
dans les source de l'exe je vois ca :
sheorogath
Messages postés2448Date d'inscriptionsamedi 21 février 2004StatutMembreDernière intervention29 janvier 201017 3 juin 2007 à 16:19
pour le hhook dans CallNextHookEx :
<dt>hhk</dt><dd>[in] Windows 95/98/ME: Handle to the current hook. An application receives this handle as a result of a previous call to the SetWindowsHookEx function.
Windows NT/XP/2003: Ignored.
donc il n'echoueras pas je pense ...
en gros si je comprend bien mettre les HHOOK en globale tu trouve ca pas tres propres ? car on ne sais pas si ils seront toujours valable
"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 3 juin 2007 à 20:15
Fort exact, le retour de SetWindowsHookEx ne sert plus qu'à l'appel de fermeture du hook, Windows ne le lit plus quand on repasse dans la chaine de hook. C'était une cause de plantage system sur les winbébés, now c'est le system qui maintient le bon handle et tout va bon.
J'ai gardé depuis ma lointaine jeunesse l'habitude de placer le HHOOK en shared mais totalement inutile maintenant.