J'essaie d'obtenir les poignées de la fenêtre à une application Delphi à partir d'une application externe. Je peux voir qu'il y a quelques fenêtres créées (tapsplication, tfrmmain et quelques autres), et je sais que la touche tasses est le "contrôleur", mais jamais visible. Cependant, puis-je lire quelle est la valeur de la vraie fenêtre? Je sais que c'est Tfrmmain (pour cette application spécifique), mais est-il possible de comprendre en quelque sorte cela? Les informations stockées dans les propriétés de la fenêtre ou quelque part ailleurs? Merci! P>
3 Réponses :
Le nom de la classe de tout formulaire em> Delphi est également le nom de classe de fenêtre enregistré de la "fenêtre Windows" sous-jacente. Vous devriez donc être capable d'utiliser le Findwindow () a> Appel d'API Windows pour obtenir la poignée de la fenêtre de Tfrmmain un petit quelque chose comme: s'il y a (potentiellement) plusieurs instances d'un nom de classe de formulaire donné, vous pourrez peut-être distinguer entre en utilisant le 2e paramètre (nom de fenêtre, c.-à-d. «Légende» ou titre). Si cela ne suffit toujours pas, vous devrez peut-être obtenir un peu plus sophistiqué et regarder à l'aide du Enumwindows () fonction et vérifiant les propriétés des fenêtres pour trouver l'un des intérêts. p> Pour tester le nom de classe d'une poignée de fenêtre arbirurienne (par exemple Dans votre fonction de rappel que vous utilisez avec sans détails spécifiques de votre défi de mise en œuvre particulier, il est difficile Dire, qui est le plus susceptible de travailler le mieux pour vous, mais j'espère que cela devrait être suffisant pour vous faire descendre la bonne voie. P> P>
Non, il n'y a pas de moyen documenté de découvrir laquelle de la fenêtre représente Vous pouvez devinez em> en recherchant des fenêtres avec "Main" dans leurs noms de classe, mais même si vous en trouvez une, il n'y a aucune garantie qu'il n'y a qu'une seule instance. Les applications peuvent avoir plusieurs fenêtres de niveau supérieur, auquel cas il n'a pas beaucoup de sens à désigner l'un d'entre eux comme "principal". P> application.mainform code> de l'extérieur de l'application. Dans les versions plus récentes de Delphi, la fenêtre de la fenêtre du formulaire principal n'est pas nécessairement application.mainform.handle code> de toute façon; Les applications peuvent gérer l'événement OngetMainformhandle CODE> pour renvoyer tout ce qu'ils veulent - c'est utilisé pour choisir la fenêtre parente pour les dialogues modales. P>
Merci, j'avais peur de ça. :(
J'utilise habituellement Windowse pour m'aider à commencer, mais vous devez utiliser L'API fonctionne comme décrit par Deltics. P>