2009-06-18 6 views
6

Ich versuche, ein Tool zu schreiben, mit dem ich den Status einer PowerBuilder-basierten Anwendung überprüfen kann. Ich denke an etwas wie Spy ++ (oder, noch schöner, "Snoop", wie es für .NET-Anwendungen existiert), mit dem ich den Objektbaum (und die Eigenschaften von Objekten) einer PowerBuilder-basierten GUI untersuchen kann.Spy ++ für PowerBuilder-Anwendungen

tat ich das gleiche für die normalen (MFC-basierte) Anwendungen sowie .NET-Anwendungen schon, aber leider in Powerbuilder eine Anwendung selbst entwickeln ich nie, so ich denke, im Allgemeinen über zwei Probleme an dieser Stelle:

  1. gibt es eine API (vorzugsweise in Java oder C/C++) zur Verfügung, die man den Baum von visuellen Objekten einer Powerbuilder-Anwendung können durchqueren? Ich habe ein wenig über das PowerBuilder Native Interface-System gelesen, aber es scheint, dass dies dazu gedacht ist, PowerBuilder-Erweiterungen in C/C++ zu schreiben, die dann aus der PowerBuilder-Skriptsprache aufgerufen werden können, oder?

  2. Wenn eine API verfügbar ist - können PowerBuilder-Anwendungen sogar eine IPC-fähige API bereitstellen, mit der ich den Status einer PowerBuilder-Objekthierarchie untersuchen kann, ohne in der PowerBuilder-Anwendung zu sein? Vielleicht gibt es eine Automatisierungsschnittstelle oder etwas, das auf COM basiert - oder vielleicht etwas anderes?

Im Moment ist mein Eindruck, dass wahrscheinlich eine DLL in den Prozess der Powerbuilder-Anwendung zu injizieren und dann Zugriff auf die laufende Power VM zu gewinnen, damit ich es für den Objektbaum abfragen. Eine Art von IPC-Mechanismus lässt mich dann diese Informationen aus dem Prozess der PowerBuilder-Anwendung transportieren.

Hat irgendjemand etwas Erfahrung damit oder kann etwas Licht darauf werfen, ob irgendjemand das schon versucht hat?

Mit freundlichen Grüßen,

  • Frerich

Antwort

6

Zuerst die einfache Antwort: Ich denke, was Sie zu tun versucht haben, wurde irgendwie getan. Rex from Enable tut, was ich denke, du bist danach, aber IIRC von Gesprächen mit den Entwicklern, es hängt von Code-Hooks in der Anwendung gebaut.

Was zu dem Vorschlag führt, dass ich nicht glaube, dass Sie in der Lage sein werden, das zu tun, was Sie völlig extern von der Anwendung zu tun versuchen. Sie können Fenstergriffe mit WinAPIs greifen und einige grundlegende Dinge damit tun, aber nicht so viel wie Sie wollen. Und Informationen über DataWindows mit WinAPIs erhalten? Vergiss es.

I glaube ich Ich habe von einer API wie der, über die Sie fragen, gehört, aber ich habe noch nie von jemand anderem gehört, dass automatisierte Test-Software-Tool-Hersteller ihre Hände bekommen. Wenn dies der Fall ist (und die Qualität dieser Informationen in etwa so ist wie im Flur), dann vermute ich, dass es Probleme mit der Anwendungssicherheit geben könnte, wenn Sie das rauslassen. (Ich weiß Sie würden wollen nie meine Anwendung infizieren, oder herumzustochern und finden Sie heraus meine Geheimnisse. Grinsen)

Auch mit Haken in die Power VM Speicherplatz, ich bin nicht bewusst, in der Lage, um eine Liste von Objekten im Speicher ohne einige PowerScript-Framework-Hooks zu erhalten (z. B. eine Liste auf jedem Open- und Konstruktor mit Objekt-Handles auffüllen). Sobald Sie ein Fenster-Handle haben, können Sie seine Control-Arrays (und seine Unterklassen-Control-Arrays) leicht durchlaufen, um eine Liste von Objekten auf dem Fenster zu erhalten, aber Dinge wie NVOs-Variablen-Variablen wären problematisch.

Ich bewundere die Idee. Ich wünschte, ich hätte bessere Neuigkeiten (außer vielleicht, dass Rex Ihr Problem ohne die Kopfschmerzen lösen könnte, es selbst zu tun). Jetzt freue ich mich noch mehr darauf, was Eran veröffentlichen darf! Grinsen

Viel Glück,

Terry.

3

Ich habe gerade ein solches Instrument geschaffen, aber ich betrogen ein wenig. Ich wollte die gleiche Frage in den PB Newsgroups stellen. Meine Lösung besteht aus zwei Teilen:

Spy-like-Tool - eine eigenständige Anwendung wie Spy ++, d. H. Sie können ein Ziel auf ein Steuerelement ziehen, mit Windows-API-Funktionen (obwohl in PB geschrieben).

Interne Infrastruktur für Zielanwendungen - befindet sich beim Vorfahren aller Anwendungsfenster. Sobald ein bestimmtes (Windows-) Handle übergeben wurde, durchläuft es das Array Control [] und sucht nach dem Steuerelement, dessen Handle mit dem angegebenen übereinstimmt. Bei Bedarf wird es auch in Kontrollcontainer wie Registerkarten umgewandelt.

Wenn der Benutzer ein Steuerelement auswählt, sucht das Spy-Tool zuerst mithilfe der Windows-API nach dem entsprechenden Fenster. Wenn das Tool gefunden wird, sendet es eine benutzerdefinierte Nachricht an dieses Fenster, die dann von der Infrastruktur der App verarbeitet wird. Das Steuerelement befindet sich dann in der PB-App und seine Details werden schließlich an das Spy-Tool gesendet, das sie dem Benutzer präsentiert.

Ich vermute, dass der Infrastrukturteil mit etwas externem ersetzt werden kann, da ich Tools gesehen habe, die das zu können scheinen (Visual Expert, QTP). Ich hatte jedoch keine Zeit für weitere Untersuchungen, und diese Lösung war relativ einfach zu entwickeln.

Ich muss sagen, Ihre Frage kommt zu einem überraschenden Zeitpunkt. Siehe this recent question of mine. Wenn Sie an dem von mir erstellten Tool interessiert sind, schreiben Sie mir einen Kommentar.