Hook de la souris sur une fenêtre issue d'un objet COM

chris_brabant Messages postés 64 Date d'inscription dimanche 24 juillet 2005 Statut Membre Dernière intervention 29 septembre 2014 - 15 mars 2006 à 16:44
chris_brabant Messages postés 64 Date d'inscription dimanche 24 juillet 2005 Statut Membre Dernière intervention 29 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

2 réponses

rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
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.

rvblogn
0
chris_brabant Messages postés 64 Date d'inscription dimanche 24 juillet 2005 Statut Membre Dernière intervention 29 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

Voilà où j'en suis.
0
Rejoignez-nous