Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Control in eine fremde Anwendung bringen??? (https://www.delphipraxis.net/24605-control-eine-fremde-anwendung-bringen.html)

merovingian 23. Jun 2004 14:36


Control in eine fremde Anwendung bringen???
 
Hallo,

es muß doch irgendwie möglich sein, irgendein Control (zb. einen Panel) in einer Fremden Anwendung zu erzeugen. Es gibt doch zb auch einige Programme, die ToolBars oder ähnliches in anderen Programmen anlegen, obwohl das Programm keine Schnittstelle oder ähnliches dazu anbietet?? Wie geht sowas?

NeoXX 23. Jun 2004 23:29

Re: Control in eine fremde Anwendung bringen???
 
Man kann die Parent-Eigenschaft eines existierenden Controls auf das Fenster-Handels einer anderen Anwendung "umbiegen". Das Control ist dann ein "Kind" der anderen Anwendung, gehört aber noch zur eigenen.
d.h. Man kann es von der eigenen Anwendung wie gewohnt steuern und wenn die eigene Anwendung geschlossen wird, wird auch das Control geschlossen.

Hier der Code zum ändern der Parent-Eigenschaft:
Delphi-Quellcode:
Windows.SetParent(Pnl.Handle, Hnd);

Luckie 24. Jun 2004 10:07

Re: Control in eine fremde Anwendung bringen???
 
Zitat:

Zitat von merovingian
Es gibt doch zb auch einige Programme, die ToolBars oder ähnliches in anderen Programmen anlegen, obwohl das Programm keine Schnittstelle oder ähnliches dazu anbietet??

´
Das wäre mir neu.

Aber egal. Und wie soll es weitergehen, wenn du Schaltfläche auf dem fremden Fenster hast? Ein KLick auf den Button löst eine MSDN-Library durchsuchenWM_COMMAND Nachricht aus, welche an das Parentfenster gesendet wird. Gut und dann? Woher soll das fremde Fenster wissen, was es machen soll, wenn dein Button geklickt wird? Man könnte die Fenster-Prozedur des fremden Fensters subclassen. Aber dazu musst du eine DLL in den Adressraum des Prozesses injezieren, denn von "außen" kommst du da nicht dran.

Deswegen: Was soll das werden und warum willst du eine eigene Schaltfläche in einem fremden Programm haben?

merovingian 24. Jun 2004 12:52

Re: Control in eine fremde Anwendung bringen???
 
Hallo,

also weniger ein Button werden, mehr eine Komponente, die ich von TPanel zum Anzeigen von Bildern u. Videos abgeleitet hab. Der Grund dafür ist ein Werbekontept ähnlich wie es zb. bei Kazaa ist, dass also Werbebanner in jeglicher Form an bestimmten Stellen im Programm eingeblendet werden können. Ich will damit nicht irgendwelche Anwendungen mit Werbung vollstopfen, nur soll es eben möglich sein, diese Komponente ohne Änderung der Quellcodes unterzubringen.

Die Zeichenvorgänge werden ja dann vom Programm selbst gesteuert (eigentlich schon, oder?). Und den Klick wollte ich dann mittels einem Hook abfangen und die Auswertung / Identifizierung über die ControlID bzw. das Handle machen und darauf hin die entsprechnde Aktion auslösen. Dazu soll das ganze dienen, nur bin ich im PSDK nicht wirklich weitergekommen um mein Problem zu lösen.

Luckie 24. Jun 2004 17:56

Re: Control in eine fremde Anwendung bringen???
 
Ich freue mich über jeden neuen Hook im System. :evil:

merovingian 24. Jun 2004 22:55

Re: Control in eine fremde Anwendung bringen???
 
Naja komm, ein Hook ansich ist ja nichts schlimmes wenn er sauber und unschädlich arbeitet und immer schön CallNextHookEx aufruft, oder ???? So und jetzt geh ich meinem Ansatz mal weiter nach ... ich hoffe, du lässt mich am Leben :? Luckie, wenn ich morgen nochmal nachfragen sollte ???

NeoXX 24. Jun 2004 23:29

Re: Control in eine fremde Anwendung bringen???
 
Das mit dem "Umbiegen" des Parents funzt wunderbar. Ich kann jegliche Controls von meinem Fenster auf ein anderes umlegen. Ich kann dann auch alles mit dem jeweiligen Control machen, was ich auch in der eigenen Anwendung machen könnte.
Ok, ich bekomme keine Botschaften mehr vom Control, das wird in diesem Fall ja aber auch nicht gebraucht (wobei, ein Schließen-Knopf wäre sinnvoll :!: ).

Mit dem folgenden Code kann man das Control bei Bedarf auch wieder zurückholen (solange das andere Fenster sammt dem Panel nicht geschlossen wurde):

Delphi-Quellcode:
var
  Hnd: HWnd = 0;

...

procedure TForm1.Button1Click(Sender: TObject);
begin
  if (Hnd = 0) then Hnd := FindWindow(nil, 'Arbeitsplatz');
  if (Hnd <> 0) then
    Hnd := Windows.SetParent(Panel1.Handle, Hnd)
  else
    ShowMessage('Öffne mal den Arbeitsplatz und versuchs dann nochmal!');
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Panel1.Color     := not Panel1.Color;
  Panel1.Font.Color := not Panel1.Color;
  Panel1.Caption   := Format('Parent: %d', [GetParent(Panel1.Handle)]);
end;
Übrigens, ich hasse Werbebanner :evil:

Luckie 25. Jun 2004 13:02

Re: Control in eine fremde Anwendung bringen???
 
Zitat:

Zitat von merovingian
Naja komm, ein Hook ansich ist ja nichts schlimmes

Jeder Hool belastet das System. Nachrcihten müssen ja immer noch durch zusätzlichen Code geschleift werden.

Zitat:

Ok, ich bekomme keine Botschaften mehr vom Control
Eben und wie willst du da auf einen Klick oder ähnliches reagieren?

merovingian 25. Jun 2004 13:26

Re: Control in eine fremde Anwendung bringen???
 
Hallo,

Zitat:

Zitat von NeoXX
Das mit dem "Umbiegen" des Parents funzt wunderbar. Ich kann jegliche Controls von meinem Fenster auf ein anderes umlegen.

Komisch, dass war eigentlich mein erster Gedanke .. nur da hats nicht funktioniert. Naja, dann werd ichs nochmal probieren.

Zitat:

Zitat von NeoXX
Übrigens, ich hasse Werbebanner

Tja, das geht wohl allen so (mir auch). Nur wenn du dafür ein Programm kostenlos nutzen kannst und den Programmierer bei seiner Weiterentwicklung unterstützt, sieht die Sache schon anders aus. Oder möchstest du gerne dem Entwickler der Freeware, die du nutzt, die Traffickosten / Webspace / etc. bezahlenden. Was vielen nicht klar ist... wenn man etwas wirklich sinnvolles programmiert, was dann auch von vielen genutzt wird entstehen ein Haufen Unkosten, die gedeckt werden müssen. Und wenn man dann seine Software schon kostenlos anbietet, dann kann man das ja wenigsten auf diese Weise regeln?!?!

Zitat:

Zitat von Luckie
Jeder Hool belastet das System. Nachrcihten müssen ja immer noch durch zusätzlichen Code geschleift werden.

Eine zusätzliche Belastung ist es ganz sicher, nur geht der Trend dahin, dass immer mehr Benutzer HighEnd Pc´s haben ... und da ist die Frage dann, wie stark diese Belastung auffällt. Und die meisten Programme brauchen keine Hooks, um ihre Funktion zu erfüllen... daher dürfte die Anzahl der gesetzen Hooks relativ gering bleiben.

Zitat:

Zitat von Luckie
Eben und wie willst du da auf einen Klick oder ähnliches reagieren?

Und da kommt dan der Hook ins Spiel :lol:

Luckie 25. Jun 2004 13:49

Re: Control in eine fremde Anwendung bringen???
 
Zitat:

Zitat von merovingian
Eine zusätzliche Belastung ist es ganz sicher, nur geht der Trend dahin, dass immer mehr Benutzer HighEnd Pc´s haben ... und da ist die Frage dann, wie stark diese Belastung auffällt. Und die meisten Programme brauchen keine Hooks, um ihre Funktion zu erfüllen...

Tja und dann beschweren sich die Leute immer, dass die Hardwareanforderungen in den Himmel wachsen.
Zitat:

daher dürfte die Anzahl der gesetzen Hooks relativ gering bleiben.
Aber nicht, wenn alle so denken wie du und ich befürchte es gibt schon mehr Hooks im System als wir uns träumen lassen.

Und Hooks können ziemlich gefährlich sein. Ich hatte ein Messenger Programm. Das hat wohl auch einen Hook installiert oder so was. Jedenfalls jedesmal, wenn ich im Explorer eine Datei oder Ordner mit der Rechten Maustaste angeklickt habe ist der Messenger mit einer Exception abgestürzt. :evil: Ich brauche wohl nicht zu erwähnen, dass er ziemlioch schnell wieder runter war.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:32 Uhr.
Seite 1 von 3  1 23      

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