Énumérer les contrôles VCL dans une application externe
Question
est possible via l’API Windows d’énumérer et d’itérer les contrôles VCL d’un formulaire (TForm) appartenant à une application Win32 externe écrite en C ++ Builder ou Delphi.
Au revoir.
La solution
Non. Tout d’abord, considérez que l’API Windows n’a aucune idée de ce que la & V; VCL " est. Il ne sait pas "TButton". ou & TS; TStringGrid, " et il ne sait certainement pas "TImage". ou & TL; TLabel, " qui n'ont même pas de poignées de fenêtre.
Vous pouvez utiliser EnumChildWindows
pour obtenir les descripteurs des contrôles fenêtrés. Vous pouvez regarder leurs noms de classe pour déterminer s'ils venaient de " TButton " ou & TS; TStringGrid, " mais même dans ce cas, vous n’auriez accès à aucune installation liée à un objet. Vous n'auriez pas de référence à un objet et vous ne pourriez donc lire aucune propriété ni appeler aucune méthode.
TestComplete , à partir du contrôle qualité automatisé, permet d'accéder aux formulaires et aux classes d'un programme à partir d'un site externe. programme, qui ressemble à ce que vous essayez peut-être de faire. Cela fonctionne en ayant une unité que vous incluez dans le programme Delphi, et cette unité fournit essentiellement une porte dérobée au programme TestComplete à utiliser pour interroger les éléments internes du programme. Cela nécessite la coopération du développeur de l'application; vous ne pouvez pas sic TestComplete sur un programme arbitraire.
Autres conseils
Vous pouvez consulter les DFM, qui sont stockés en tant que ressources dans l'exécutable.
Anders Ohlsson a mis au point une application du scanner VCL qui le fait il y a quelque temps déjà. Le code source est également disponible.
Jusqu'à Delphi 2006, vous pouviez utiliser le vcltest3.dll pour cela. Mais maintenant, vous devez suivre les recommandations de Rob Kennedy.