Entwickler-Ecke

Windows API - Fremde Anwendung "einfangen"


rochus - Sa 25.12.04 17:16
Titel: Fremde Anwendung "einfangen"
Hallo,
bin mir jetzt nicht ganz sicher, ob das hier her gehört, aber ich nehme mal an, wenn was geht, dann über die Win32API :)

Meine Frage ist eigentlich erstmal prinzipieller Natur, also ob das schon mal jemand gemacht hat, und wenn ja, wie:
Ohne COM oder ähnliches anzusprechen würde ich gerne eine Anwendung so einfangen, dass ich sie quasi wie ein MDI Fenster anspreche. In der Taskleiste sollte die Anwendung wenn möglich nicht unbedingt erscheinen, das wäre aber zu "verkraften". Also quasi fernsteuerung nur ohne COM.

Geht sowas und wenn ja, wo bekomme ich Informationen dafür.

gruß
rochus


Karlson - Sa 25.12.04 18:56

Ich kapiere echt nicht was du meinst ;)

Aber "fernsteuern" kannst du das Fenster doch mit dem Handle und so sachen wie PostMessage. Also da kannst du z.b. Buttons klicken, und statics editieren und das Fenster verschieben usw.

Meinst du das?


rochus - Sa 25.12.04 19:06

Okay, ich versuchs nochmal zu erklären, was ich eigentlich will *g*.

Es klingt jetzt so ähnlich wie ein Desktop-Ersatz, wie etwa Litestep oder SharpE, ist aber ganz anders:
Stell dir vor, die Anwendung startet und links hast du wie bei Outlook so ne Outlook-bar. Jetzt ist auf den einzelnen Buttons dieser Bar nicht irgendne Mail- oder Kalenderfunktion, sondern über diese Buttons startest du irgendein Programm, sagen wir mal, Notepad.

Das starten und so weiter ist alles kein Problem und an die Anwendung Nachrichten schicken auch nicht, aber: Ich hätte gern, dass die Anwendung, die ich starte "innerhalb" meines Formulars angezeigt wird. Also wie, wenn ich ein MDI Fenster erzeuge.

Ich hoff jetzt ist's verständlicher? *lol*


gruß
rochus


Jakob Schöttl - Di 02.01.07 22:09

Nur der Vollständigkeit will ich hier, um dieses Thema abzuschließen sagen:

Delphi-Quelltext
1:
Windows.SetParent(FindWindow(nil,'<FensterName (entspricht in Delphi: Form.Caption) des zukünftigen "MDI-Fensters">'),Self.Handle);                    

Hier wird also die Eigenschaft Parent des Zielfensters auf dein eigenes Delphi-Form gesetzt. Das Programm wird dann in deinem Fenster angezeigt. Hättest das gleiche Thema hier im df [http://www.delphi-forum.de/viewtopic.php?t=64000&highlight=] gefunden.


Gausi - Di 02.01.07 22:32

user profile iconJakob Schöttl hat folgendes geschrieben:
Hättest das gleiche Thema hier im df [http://www.delphi-forum.de/viewtopic.php?t=64000&highlight=] gefunden.
Richtig. Ein Zeitsprung von knapp zwei Jahren in die Zukunft ist ja seit den 80er Jahren dank des Flux-Kompensators kein Problem mehr. :roll:

Und auch wenns bei dir scheinbar funktioniert hat, so würde mich mal interessieren, ob das nicht mehr gilt:
aus der Delphi Hilfe (D7 Personal):
Remarks

An application can use the SetParent function to set the parent window of a pop-up, overlapped, or child window. The new parent window and the child window must belong to the same application.


Jakob Schöttl - Di 02.01.07 23:14

user profile iconGausi hat folgendes geschrieben:
user profile iconJakob Schöttl hat folgendes geschrieben:
Hättest das gleiche Thema hier im df [http://www.delphi-forum.de/viewtopic.php?t=64000&highlight=] gefunden.
Richtig. Ein Zeitsprung von knapp zwei Jahren in die Zukunft ist ja seit den 80er Jahren dank des Flux-Kompensators kein Problem mehr. :roll:


Gut, das hab ich übersehen...

user profile iconGausi hat folgendes geschrieben:
Und auch wenns bei dir scheinbar funktioniert hat, so würde mich mal interessieren, ob das nicht mehr gilt:
aus der Delphi Hilfe (D7 Personal):
Remarks

An application can use the SetParent function to set the parent window of a pop-up, overlapped, or child window. The new parent window and the child window must belong to the same application.


... aber falls das auch ironisch gemeint ist: Bei mir geht es wirklich (WinXP, D7Prof)!
Du hast nicht zufällig versehentlich bei der VCL-Hilfe von TCustomForm.SetParent nachgesehen?