Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Fenster von fremden Programm in eigener Form anzeigen (https://www.delphipraxis.net/137424-fenster-von-fremden-programm-eigener-form-anzeigen.html)

DevilsCamp 20. Jul 2009 20:21


Fenster von fremden Programm in eigener Form anzeigen
 
Eventuell ist der Titel nicht 100% so, wie ich es meine. Daher nochmal eine Erklärung:
Ich habe ein Programm zum Verwalten meiner PuTTY-Sessions (inkl. ClusterSSH-Funktion). Der Nachteil: Alle offenen PuTTY-Fenster sind eigenständig.

Ich weiß, dass es die Möglichkeit gibt, diese Fenster auch innerhalb meines eigenen Programms anzeigen zu lassen (so als MDI-Anwendung und Tabs usw). Beispiel habe ich hier im Forum gefunden und auch der PuTTY-Connection-Manager kann das.

Nun meine Frage: Wie muss ich den PuTTY-Prozess starten, so dass das Fenster nicht den Desktop als Parent hat, sondern z.B. eine TForm? CreateProcess scheint mir das keine Möglichkeit zu haben den Parent anzugeben und ShellExecute funktioniert leider nicht.

Danke im Voraus,
Marc

Christian Seehase 20. Jul 2009 21:12

Re: Fenster von fremden Programm in eigener Form anzeigen
 
Moin Marc,

wenn Du CreateProcess (oder ShellExecuteEx) verwendest, bekommst Du Daten über den gestarteten Prozess zurück, u.a. auch die die ThreadID des Hauptthreads.
Damit könntest Du dann EnumThreadWindows aufrufen, um an das Fenster zu kommen.
(nur als Idee, ob das funktioniert weiss ich nicht).

DevilsCamp 20. Jul 2009 21:42

Re: Fenster von fremden Programm in eigener Form anzeigen
 
Das ist nicht, was ich möchte (das habe ich ja bereits). Ich möchte, dass mit ShellExecute(Ex) oder CreateProcess kein neues Fenster erstellt wird, sondern direkt auf meiner TForm, TPanel, o.ä. angezeigt wird.

Stell dir das Programm dann vor wie Firefox. Ich habe Tabs nur dass nicht Web-Seiten darin angezeigt werden, sondern PuTTY-Instanzen.

DeddyH 20. Jul 2009 21:47

Re: Fenster von fremden Programm in eigener Form anzeigen
 
Du brauchst aber doch die Fensterhandles. Mit Windows.SetParent könntest Du die dann z.B. in einem Pagecontrol bzw. dessen Tabsheets "einfangen" (ungetestete Behauptung).

rollstuhlfahrer 20. Jul 2009 21:52

Re: Fenster von fremden Programm in eigener Form anzeigen
 
Zitat:

Zitat von DeddyH
Du brauchst aber doch die Fensterhandles. Mit Windows.SetParent könntest Du die dann z.B. in einem Pagecontrol bzw. dessen Tabsheets "einfangen" (ungetestete Behauptung).

so würde ich das auch machen. Anderer versuch ist, die Fenster auszublenden und dann Bildkopien anzuzeigen. Das funktioniert auf jeden fall, man kann aber NIX eingeben.

Bernhard

DevilsCamp 20. Jul 2009 22:24

Re: Fenster von fremden Programm in eigener Form anzeigen
 
Zitat:

Zitat von rollstuhlfahrer
Zitat:

Zitat von DeddyH
Du brauchst aber doch die Fensterhandles. Mit Windows.SetParent könntest Du die dann z.B. in einem Pagecontrol bzw. dessen Tabsheets "einfangen" (ungetestete Behauptung).

so würde ich das auch machen. Anderer versuch ist, die Fenster auszublenden und dann Bildkopien anzuzeigen. Das funktioniert auf jeden fall, man kann aber NIX eingeben.

Bernhard

Danke, das funktioniert. Jetzt muss ich nur noch herausfinden, wie ich das PuTTY-Fenster zu einem Border-losen Fenster mache. Dazu suche ich aber erstmal in Forum/Google/andere Seiten.

Grüße,
Marc

Christian Seehase 21. Jul 2009 19:43

Re: Fenster von fremden Programm in eigener Form anzeigen
 
Moin Marc,

Zitat:

Zitat von DevilsCamp
Jetzt muss ich nur noch herausfinden, wie ich das PuTTY-Fenster zu einem Border-losen Fenster mache.

schau Dir mal MSDN-Library durchsuchenSetWindowLong (bzw. MSDN-Library durchsuchenSetWindowLongPtr) und MSDN-Library durchsuchenSetWindowPlacement an.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:49 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