Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Oberfläche (Resourcen) eines Programms nachbilden (https://www.delphipraxis.net/55334-oberflaeche-resourcen-eines-programms-nachbilden.html)

moritz 19. Okt 2005 18:59


Oberfläche (Resourcen) eines Programms nachbilden
 
Moin!

Ich wollte mich mal erkundigen, ob es eine Möglichkeit gibt, aus einer EXE (Bzw. eben dem ganzen Programm) die Oberfläche auszulesen und diese Nachzubauen...Eben selber ein Fenster aufbauen, wie es Windows macht, ohne das Programm ausführen zu müssen.
Oder, falls das nicht geht, das Programm auszuführen, und paralell dazu das Interface mitlaufen zu lassen.

Gruß

Achtzig 20. Okt 2005 14:30

Re: Oberfläche (Resourcen) eines Programms nachbilden
 
Ich glaube nicht. Komponenten die zB. zur Laufzeit erzeugt werden, werden natürlich nicht in der Resource gespeichert. Außerdem müßten alle erforderlichen Komponenten vorhanden sein und richtig initialisiert werden, wozu das Programm ausgeführt werden muß.

Ein Interface wird Dir auch nicht weiterhelfen, da Dir dann immernoch der Programmcode fehlt.
Wenn es nur um das Abbild eines Fensters geht, kann es mit Alt+Druck in die Zwischenablage
kopiert werden.

Nebenbei bemerkt sind wir doch Programmierer und keine Piraten. :wink:

moritz 20. Okt 2005 14:33

Re: Oberfläche (Resourcen) eines Programms nachbilden
 
Moin!

Ja, aber die Oberfläche wird afaik. eben aus Window Messages (ShowMessage) und eben den Resourcen aufgebaut - Wenn man an beides rankommen würde, müsste es doch eigentlich möglich sein, oder?

Das mit den Piraten möchte ich nicht gehört haben :mrgreen: Nein, ernsthaft: Es geht hier nicht um Piraterie

Gruß

Edit: Rechtschreibefehler

Achtzig 20. Okt 2005 15:00

Re: Oberfläche (Resourcen) eines Programms nachbilden
 
Gut - kein Pirat :-D

Ich glaube, ich verstehe Deine Frage nicht richtig. ShowMessage ist für die Ausgabe eines Textes zuständig. Die Windows-Messages werden von Windows und einem Programm zur "Unterhaltung" genutzt und nicht als Resource gespeichert, sondern vom Programmcode gesteuert.

Die Oberfläche würde ich auch nicht aus der Resource laden (kann wegen Laufzeiterstellungen unvollständig sein) sondern direkt aus dem geöffneten Fenster "holen". Handle des Fensters besorgen und alle Komponenten ermitteln. Aus dem Kopf weiß ich leider nicht, wie die entsprechenden Windows-Funktionen benannt sind; sie sind auf jeden Fall vorhanden.

"Fremde" Fenster beinhalten oft auch "fremde" Komponenten die nicht einfach (in der Funktion) nachgebildet werden können.

Wahrscheinlich ist es wesendlich einfacher, daß Fenster per Hand nachzubauen. :cry:

moritz 20. Okt 2005 15:34

Re: Oberfläche (Resourcen) eines Programms nachbilden
 
Moin!

Also, es geht darum, ein beliebiges Programm in einem zweiten Fenster nachzubilden. Sprich, ich starte z.B. meinen Firefox, öffne mein Programm und das zeigt mir genau das, was auch der Firefox in dem Moment zeigt. Wenn ich im Firefox ein MainMenu aufmache, soll das in meinem Programm auch passieren.
Eben wie eine grafische Kopie, die eben nicht gecaptured ist, sondern echt nachgebaut.

Das ganze müsst doch eigentlich gehen, wenn man sämtliche das Fenster betreffende Nachrichten (Das Fenster wird doch nur mit Nachrichten gemalt, oder?) abfängt und sie auf die Resourcen, die man dem Programm entnommen hat, anwendet, oder?

Gruß

Stanlay Hanks 20. Okt 2005 16:18

Re: Oberfläche (Resourcen) eines Programms nachbilden
 
Hi Moritz. Ich kann mir nicht vorstellen, dass das klappen kann. Es gibt derart viele WindowsMessages, die ein äußerst kompliziertes Zusammenspiel haben. Da immer richtig auf die richtige zu reagieren, dürfte schwer bis unmöglich sein. Außerdem sehe ich ein Problem: Was, wenn das betreffende ("abzumanlende ") Programm überdeckt (oder im Hintergrund) ist? Dann wird es gar nicht gezeichnet, sondern nur der Teil, der gerade zu sehen ist.

Man liest sich, Stanlay :hi:

moritz 20. Okt 2005 16:20

Re: Oberfläche (Resourcen) eines Programms nachbilden
 
Moin!

Die Sache mit dem Hintergrund ist nicht das Problem...die Messages werden ja trotzdem gesendet, von Windows aber vermutlich einfach nicht gezeichnet.
Das es schwer wird, ist mir klar - aber interessieren würde mich das trotzdem mal, irgendeine Möglichkeit dazu müsste es doch geben, oder?

Gruß

dizzy 20. Okt 2005 23:44

Re: Oberfläche (Resourcen) eines Programms nachbilden
 
Du müsstest trotzdem haufenweise Programmlogik "abgreifen" können, was imho nicht, oder kaum machbar geht. Man stelle sich eine Paintbox vor, auf die bei WM_PAINT ein Backbuffer kopiert wird, der zuvor evtl. noch mit ein paar Pixeln bemalt wird. Du weisst allein durch WM_PAINT überhaupt nix von dem Backbuffer, und erst recht nichts über das enthaltene Bitmap, geschweige denn wie es zustande kam. Das ist rein Sache des Programmes, und es findet ja auch alles brav in dessen virtuellen Adressraum statt (für gewöhnlich).
Die einzigen Elemente die sich in etwa so wie du dir das denkst abgreifen ließen sind solche, die die WinAPI von sich aus bereitstellt (Fenster, Buttons, Edits, etc.), aber auch bei diesen werden sicherlich hier und da selbstgebaute Varianten verwendet (-> Skins), oder auch mal gerne ein OwnerDraw, durch das du schon mal nicht mehr an die ursprüngliche Darstellung kommst.

Ich fürchte mit deinem Ansatz - so interessant er klingt - wird man nicht allzu weit kommen :?

kiar 21. Okt 2005 00:28

Re: Oberfläche (Resourcen) eines Programms nachbilden
 
suche mal nach DeDe.

raik

dizzy 21. Okt 2005 00:59

Re: Oberfläche (Resourcen) eines Programms nachbilden
 
Zitat:

Zitat von kiar
suche mal nach DeDe.

raik

Soweit ich das verstanden habe soll das für sämtliche Programme funktionieren, und zwar voll dynamisch zur Runtime beider Programme. DeDe ist doch afaik "nur" ein Delphi-Decompiler, oder kann der auch mehr? Jedoch sollte das egal wie nicht allzuviel bringen. Denn am Ende liefe es darauf hinaus, fast das gesamte Programm zu kopieren, und die Messages zu doppeln. Da wird's dann aber mit der Legalität haarig, und auch mit dem Sinn :stupid:.
Ich denke da sollte man seine Zeit und Energie besser in die Entwicklung günstiger Übertragung von (Teil-)Bitmaps stecken, auch wenn es zugegebendermaßen vergleichsweise langweilig wäre ^^

LoRd-MuldeR 21. Okt 2005 02:49

Re: Oberfläche (Resourcen) eines Programms nachbilden
 
Also wenn das Programm, von dem du "abkupfern" möchtest, in Delphi geschrieben wurde, kannst du einfach die .dfm Files der einzelnen TForm's aus den Resources kopieren und in dein Programm einbauen. Die Forms sind in "RCData/TForm1" und so weiter gespeichert. Sollte mit nem normal Resource-Editor kein Progblem sein, die als Text-Datei zu extrahieren. Klar, dass du die darin verwendeten Componenten installiert haben musst, sonst bekommste en Problem. Und alles was den Programm-Code angeht, musste natürlich selbst schreiben (oder evtl. per Decompiler rausziehen, aber damit hab ich null Erfahrung).

moritz 21. Okt 2005 13:12

Re: Oberfläche (Resourcen) eines Programms nachbilden
 
Moin!

Okay, dann danke mal für die Antworten.

@Lord: Ich habe ja keinen Zugriff auf die dfm-Files, ich will das ganze ja wie gesagt allgemein gestalten.

@Dizzy: Okay, ich bin mir im Klaren, das das ganze kein Kinderspiel wird ;) Trotzdem, wenn ich jetzt auch noch Zugriff auf den Adressraum des Programms hätte, bestünde dann die Möglichkeit, das ganze auszulesen? Eigentlich wäre ja der Adressraum auch der richtige Ansatzpunkt, oder? Denn da ist ja alles zu dem Programm gespeichert, die ganze Oberfläche, etc, oder? Damit würde ich mir das umständliche selberauswerten der Windowsmessages sparen und einfach gleich das auslesen, was dabei rausgekommen ist?

Die Sache mit dem Capturen ist mir klar, das wäre die Lösunge, wenn ich einfach nicht mehr weiterkomme - aber Programme in diese Richtung gibt es ja bereits genug. :)

Gruß


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:08 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz