cs_bamoo
Messages postés17Date d'inscriptionvendredi 29 août 2003StatutMembreDernière intervention21 décembre 2004
-
26 juin 2004 à 23:19
cs_bamoo
Messages postés17Date d'inscriptionvendredi 29 août 2003StatutMembreDernière intervention21 décembre 2004
-
28 juin 2004 à 21:09
Bonjour, j'ai un petit problème avec un hook qui en marche pas. J'aimerais intercepter les messages envoyés à une application. j'ai utilisé spy++ pour déterminer les messages envoyés mais je n'arrive pas à les intercepter.
switch(pMSG->message)
{
case WM_MDISETMENU :
case WM_NCHITTEST :
case WM_NCPAINT:
case WM_GETTEXT:
MessageBeep(MB_OK);
MessageBoxA(0,"ici","ici",0);
break;
}
BruNews
Messages postés21041Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 201917 27 juin 2004 à 00:51
Faut bannir MessageBox et toute autre action user pendant le traitement du hook sinon tu auras de la reentrance donc boucle infinie et tu risques d'embarquer quasi tous les processus dans la galere.
On verra le reste demain.
BruNews
Messages postés21041Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 201917 27 juin 2004 à 14:28
bon je t'ai fait un exemple qui log 3 messages seulement:
WM_NCHITTEST, WM_NCPAINT et WM_GETTEXT.
Log est niveau systeme toutes fenetres, enregistre dans fichier M.txt dans dossier temp du exe lanceur.
Tests faits sur XP et Server 2003.
M.txt contient ce genre de lignes:
WM_NCPAINT
WM_NCPAINT
WM_GETTEXT
WM_NCPAINT
WM_NCPAINT
WM_GETTEXT
WM_NCHITTEST
WM_NCHITTEST
WM_NCHITTEST
WM_GETTEXT
WM_NCPAINT
WM_GETTEXT
....
1 event par ligne sans distinction de la fenetre ni rien d'autre. A toi d'ajouter ce dont tu auras besoin (titre fenetre etc...), tu peux absolument tout capter sur ce modele mais fais bien gaffe a ne pas planter le systeme. Je te le passe fonctionnant mais je decline toute responsabilite sur modifs erronnees...
Passe ton mail dans un message perso sur ce site pour envoi.
BruNews
Messages postés21041Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 201917 28 juin 2004 à 18:25
bamoo > Excuse mais il y a un BIG defaut dans exemple fourni (partage du hfl interprocessus est errone). Tu me redonneras ton mail (eh oui deja disparu) si tu veux un autre exemple, correct cette fois.
cs_bamoo
Messages postés17Date d'inscriptionvendredi 29 août 2003StatutMembreDernière intervention21 décembre 2004 28 juin 2004 à 18:41
hfl ?
En tout cas, je l'ai pas vu ce problème mais je veux bien que tu me le renvois (je te redonne mon mail en message perso).
Sinon, j'ai une petit question vite fait, comment faire pour empêcher que le message soit transmis à l'application cible ?
J'ai essayé retrun 0 et return 1 au lieu de return CallNextHookEx, mais apparemment, ca ne marche pas...
Merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
BruNews
Messages postés21041Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 201917 28 juin 2004 à 19:48
Le hook de mon exemple ne doit pas etre interrompu.
Si tu veux en intercepter et ne pas repasser, faut mettre d'autres hooks dans la dll, aucun probleme si plusieurs dans la meme dll, faut juste faire gaffe a la coherence de la chose.
Je suis en train de modifier completement exemple precedent.
BruNews
Messages postés21041Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 201917 28 juin 2004 à 21:02
Certains hooks comme WH_KEYBOARD permettent qu'on interrompe la retransmission, return 1 par exemple, ou qu'on modifie les valeurs a transmettre. Avec d'autres c'est totalement deconseille, tu risques le crash. Ceci dit on peut parfois, c'est une question de logique, regarde bien le type de message, si tu penses que non vital alors tu testes mais enregistre bien tout avant.
cs_bamoo
Messages postés17Date d'inscriptionvendredi 29 août 2003StatutMembreDernière intervention21 décembre 2004 28 juin 2004 à 21:09
Donc, si j'ai bien compris, avec "return 1", le message n'est pas transmis ? bizarre, il me sembalit que si, je vais tester c sur des messages pas très importants (si j'en trouve :-)
Merci