Trouver la DLL qui contient les contrôles vues à l'écran

Trouver la DLL qui contient les contrôles vues à l'écran - API Win32 - Programmation

Marsh Posté le 12-02-2009 à 14:23:56    

Bonjour,
 
Pour le moment indépendamment du langage final, quelles seraient selon vous les APIs Windows nécessaire pour réaliser ceci :
je souhaite trouver le chemin complet ou bien juste le nom de la DLL (ou de l'exe) depuis laquelle sont affichées les contrôles (ou leur container quoi) que je survole du curseur.
 
Exemple une appli qui load une assembly externe pour en afficher un panel avec des boutons dedans, en passant le curseur sur un de ces contrôles externes, je voudrais non pas obtenir l'appli source mais la DLL externe, véritable conteneur des contrôles. Est-ce clair ?
 
Pour l'instant j'en suis à WindowFromPoint qui me donne le handle de ce que j'ai sous le curseur, après je sèche car j'ai essayé plein de chose : j'obtiens bien le hinstance de l'appli mère, ou même le nom de la classe sous le curseur grâce à GetClassName, je suis capable de chopper le chemin de l'appli mère, mais jamais celui de la DLL.
 
Sous .NET (C# ou VB) je parviens pourtant à la voir (ma externe DLL) dans la liste des modules chargés par l'appli mère, avec des infos comme sa baseaddress ou son entrypoint, et même la mémoire qu'elle occupe, mais je n'arrive pas à recouper ça avec ce que j'extrait initialement de mon WindowFromPoint !
 
Est-ce possible seulement ? J'ai ECUMÉ le net pour trouver comment faire, ou même une appli qui le ferait, mais tout se limite à faire ce que fait Spy++ de MS par exemple. Help ?
 
Merci

Reply

Marsh Posté le 12-02-2009 à 14:23:56   

Reply

Marsh Posté le 12-02-2009 à 18:43:35    

C'est peut-être pas très clair ?

Reply

Marsh Posté le 12-02-2009 à 21:30:23    

Hmm, si je comprends bien, tu as des applications qui chargent des contrôles customs (autres que les classes définies dans comctl32.dll) via une dll. Tu voudrais pouvoir récupérer le nom de cette dll en pointant la souris au-dessus de ce contrôle, c'est ça ?
 
Je suis quasiment sûr que c'est infaisable. Le contrôle custom est enregistré via l'identité de l'application. Le système lui-même n'a aucunne idée que toute la logique se trouve dans une dll.
 
Le mieux que je puisse voir c'est lister les dll utilisé par le processus et procéder par élimination.

Reply

Marsh Posté le 13-02-2009 à 10:14:45    

Merci pour cette réponse, tu as bien compris.
Effectivement, je parviens à lister les dll chargées (dont celles dont je survole les contrôles, container etc) mais je n'arrive pas à faire cette élimination.
 
De plus, une fois qu'une DLL est loadée, elle le reste : donc même si j'élimine les DLL classiques pour ne garder que les customs, cela restreint certes mais cela reste imprécis.
 
J'ai une piste mais je n'arrive pas à l'exploiter :
 
1 - Sous .NET, je liste les modules chargés, et pour chacun, j'ai la quantité mémoire qu'ils utilisent chacun.
2 - Avec les API, je récupère le window handle de ce que j'ai sous le curseur, et avec ça je peux avoir le parent du contrôles sous le curseur, le nom de la class (avec l'api GetClassName) : et là il y a deux API, GetClassLong et GetClassInfo, dont je n'arrive à rien tirer, qui devrait d'après MS me permettre de récupérer la mémoire utilisé.
 
Pensez vous que je puisse recouper les deux infos pour déterminer le module ? Enfin, si je parviens à utiliser ces API qui me retourne incéssament que dalle... :-(
 
Cdt

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed