Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Exe in Exe einbinden (https://www.delphipraxis.net/143886-exe-exe-einbinden.html)

AJ_Oldendorf 25. Nov 2009 14:32


Exe in Exe einbinden
 
Hallo zusammen,
ich habe schon im Forum gesucht und tolle Beiträge gefunden zu diesem Thema.

Das klappt auch alles soweit nur habe ich ein Problem, bei Anwendungen die z.B. mit SplashScreen starten usw.
Wenn man nämlich Anwendungen damit "einbettet" die einen SplashScreen haben, dann ist evtl. nur dieser eingebettet und die "Hauptanwendung" danach wird nicht mehr eingebettet.
Gibt es eine Möglichkeit alle Fenster dieser Exe-Datei einzubetten (egal ob SplashScreen oder weiter aufpoppende Fenster).

Delphi-Quellcode:
  RunProcess('notepad.exe', SW_HIDE, True, @ProcID);

  if ProcID > 0 then
  begin
    hOtherWin := GetProcessWindow(ProcID);
    if IsWindow(hOtherWin) then
    begin
      Windows.SetParent(hOtherWin, Panel1.Handle);
      SetWindowPos(hOtherWin, 0, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOZORDER or SWP_SHOWWINDOW);
    end;
  end;
Habt ihr da eine Idee?
Viele Grüße
Alex

Bernhard Geyer 25. Nov 2009 14:48

Re: Exe in Exe einbinden
 
Check doch noch die Window-Eigenschaften. Falls keine titelzeile/nicht veränderlich ist so wird es wohl ein Splash-Screnn sein. Mußt dann halt nach einem Delay nochmal das Hauptfenster suchen.

AJ_Oldendorf 25. Nov 2009 14:52

Re: Exe in Exe einbinden
 
Das Problem ist ja, dass es sich nicht nur bei einem SplashScreen so auswirkt.
Wenn du z.B. ein Drucker-Eigenschaftsfenster drinne hast, dann wird dieses auch nicht reingemappt. Man muss ja anscheind jedes Fenster da rein mappen, welches durch die andere Exe zusätzlich aufgerufen werden kann.
Das ist ja nicht Sinn und Zweck und würde in meinem Fall auch gar nicht gehen.
Im Prinzip soll es ja so ähnlich wie bei VMWare sein.
Die haben Registerkarten wo einzelne Echsen (Betriebsysteme in diesem Fall sogar) laufen mit allen Fenstern und Co. in dieser einen Registerkarte.

Viele Grüße
Alex

Bernhard Geyer 25. Nov 2009 14:56

Re: Exe in Exe einbinden
 
Zitat:

Zitat von AJ_Oldendorf
Im Prinzip soll es ja so ähnlich wie bei VMWare sein.
Die haben Registerkarten wo einzelne Echsen (Betriebsysteme in diesem Fall sogar) laufen mit allen Fenstern und Co. in dieser einen Registerkarte.

Es schaut so aus, der Ansatz ist aber ein anderer.

du müsstest versuchen die WinAPI hooken damit jedes Fenster das keinen parent angiebt und normalerweise auf den Desktop landet dein Fenster als Parent bekommt.

AJ_Oldendorf 25. Nov 2009 14:58

Re: Exe in Exe einbinden
 
Ich wollte wenns geht, ohne Hooks auskommen...
Hättest du dennoch ein Beispiel wie ich die ganze Zeit überprüfe, ob ein Fenster ein Parent hat und wenn nein, dass ich dieses auch mit darauf lege!?

Viele Grüße
Alex

PS: Wie macht VMWare das denn? Weißt du da näheres drüber?

Bernhard Geyer 25. Nov 2009 15:02

Re: Exe in Exe einbinden
 
Zitat:

Zitat von AJ_Oldendorf
Ich wollte wenns geht, ohne Hooks auskommen...
Hättest du dennoch ein Beispiel wie ich die ganze Zeit überprüfe, ob ein Fenster ein Parent hat und wenn nein, dass ich dieses auch mit darauf lege!?

Wenn du keinen Hook willst musst du das über einen Timer machen. Ist jedoch eine Krückenlösung da das Fenster u.U. schon sichtbar ist bevor du es dir schnappst.

Zitat:

Zitat von AJ_Oldendorf
PS: Wie macht VMWare das denn? Weißt du da näheres drüber?

Wikipedia weis da viel drüber :-)

AJ_Oldendorf 25. Nov 2009 15:04

Re: Exe in Exe einbinden
 
Ok danke erstmal, ich werde mal drüber nachdenken wie ich es am besten mache.

Vielleicht kommen ja noch andere Ideen :-)

Viele Grüße
Alex

himitsu 25. Nov 2009 15:18

Re: Exe in Exe einbinden
 
VMWare simuliert einen ganzen Computer, wobei die Daten der simulierten Grafikkarte in dem Tab dargestellt werden.

turboPASCAL 25. Nov 2009 18:46

Re: Exe in Exe einbinden
 
Ja, hier wird so einiges durcheinander gewürfelt.



Drucker(treiber) und der gleichen nutzen DLL's die Fenster enthalten können die man aufrufen oder nutzen kann.

Oder geht es einfach darum Fenster anderer Applikationen "einzufangen" und diese
im eigenen Programm an zu zeigen ?
1. Ich pers. rate davon ab, da dies andere Probleme mit sich bringt
2. Man nie genau weis was die andere App mit ihrem Fenster so alles anstellt
3. gibt es zu diesem Thema hier im Forum eigentlich genügend Threads

AJ_Oldendorf 26. Nov 2009 07:08

Re: Exe in Exe einbinden
 
Also zur Vollständigkeit, ich habe drei Echsen programmiert (kenne daher auch alle Fenster, die darin enthalten sind -> es sind aber reichlich viele...), die auf einem Kunden-PC laufen sollen. Ich will natürlich vermeiden, dass der Kunde:

1) jede Echse einzeln starten muss per doppelklick
2) drei Taskleisteneinträge hat (für jede Echse eine)

Daher die Überlegung eine "Übergeordnete" Echse zu schaffen die als Container für die anderen drei dient. Dadurch würde man sich die zwei Sachen oben sparen und es würde sogar viel übersichtlicher sein.

Vielleicht könnt ihr mit diesen Infos noch etwas anfangen.

Viele Grüße
Alex

Das VMWare einen ganzen Computer interpretiert (bzw. OS), wusste ich :-)

Mithrandir 26. Nov 2009 07:09

Re: Exe in Exe einbinden
 
Öhm... Und warum hast du das nicht alles in ein Programm integriert?

AJ_Oldendorf 26. Nov 2009 07:17

Re: Exe in Exe einbinden
 
Jede Echse kommuniziert mit einem anderen PC über NamedPipe und hat komplett unterschiedliche Aufgaben und Bereiche.
Es ist für meinen Fall absolut nicht sinnvoll und auch nicht möglich alle vorneweg schon in eine Echse zu packen.
Deswegen will ich die ja in ein "Container-Objekt" packen.

Viele Grüße
Alex

SirThornberry 26. Nov 2009 07:17

Re: Exe in Exe einbinden
 
Ich würde auch alles in eine packen. Oder anstelle mehrere Exen einfach Dlls verwenden (als Pluginsystem)

turboPASCAL 26. Nov 2009 18:13

Re: Exe in Exe einbinden
 
Zitat:

Zitat von SirThornberry
Ich würde auch alles in eine packen. Oder anstelle mehrere Exen einfach Dlls verwenden (als Pluginsystem)

So würde ich es auch machen.

Alles andere wäre IMHO ein Mehraufwand.


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

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