Hook de la souris sur une fenêtre issue d'un objet COM
chris_brabant
Messages postés64Date d'inscriptiondimanche 24 juillet 2005StatutMembreDernière intervention29 septembre 2014
-
15 mars 2006 à 16:44
chris_brabant
Messages postés64Date d'inscriptiondimanche 24 juillet 2005StatutMembreDernière intervention29 septembre 2014
-
15 mars 2006 à 21:34
Bonjour
en vb.NET, j'utilise l'API SetWindowsHookEx, au travers d'une DLL en C, pour capturer les évènements de type souris sur une fenêtre qui est créée quand je fais appel à la fonction :
Dim obj = CreateObject("xxxxxxx")
Si j'ai bien compris c'est un objet COM qui est créé. J'ajoute le hook sur le thread courant, récupéré avec GetCurrentThreadId dans la DLL, ca fonctionne nickel SAUF pour la fenêtre issue du CreateObject. Quand je mets la souris dedans il ne se passe rien.
Existe-t-il une subtilité liée aux objets COM, ou alors les évènements de type souris peuvent-ils être "trappés" et ne pas circuler ?
Merci, si quelqu'un a une idée.
Chris
A voir également:
Hook de la souris sur une fenêtre issue d'un objet COM
rvblog
Messages postés792Date d'inscriptionvendredi 4 mars 2005StatutMembreDernière intervention12 juin 20127 15 mars 2006 à 18:36
Salut Chris_brabant,
j'émets une hypothèse, il faudrait peut-être que le GetCurrentThreadId ne soit pas appelé par la dll, mais plutôt par le créateur de l'objet (Dim obj = CreateObject("xxxxxxx")), pour que le ThreadId soit le bon.
Renfield sanctionnera si je me trompe...
et je serais heureux de connaitre la réponse.
chris_brabant
Messages postés64Date d'inscriptiondimanche 24 juillet 2005StatutMembreDernière intervention29 septembre 2014 15 mars 2006 à 21:34
en fait j'ai un peu tout essayé :
- avec GetCurrentThreadId dans la DLL
- en passant AppDomain.GetCurrentThreadId en argument à la DLL
- en récupérant le ProcessId associé à l'objet COM, et en énumérant les Threads fils de ce process
pas moyen de détecter les évènements de type WH_MOUSE
par contre, il semble qu'en utilisant les évènements de type WH_MOUSE_LL (LowLevel) et en mettant 0 à la place du threadId, ca fonctionne, mais la structure de type MSLLHOOKSTRUCT récupérée par la callback ne contient pas le WindowHandle de la fenêtre sur laquelle l'évènement a eu lieu. Heureusement cette structure contient une structure de type POINT, qui permet de récupérer le WindowHandle grace à l'API WindowfromPoint.
ATTENTION à bien positionner la macro _WIN32_WINNT