Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Daten austauschen über ProcessID ? (https://www.delphipraxis.net/56287-daten-austauschen-ueber-processid.html)

moelski 3. Nov 2005 11:17


Daten austauschen über ProcessID ?
 
Moin !

Es gibt auf http://www.swissdelphicenter.ch/ ein bisschen Code mit dessen Hilfe man Daten von einer Anwendung zur anderen schicken kann. Um es vorweg zu nehmen ... Diese Methode ist sicher nicht die beste, aber sie reicht bei unserer Anwendung völlig aus. :wink:
Der Link zum Code: http://www.swissdelphicenter.ch/de/showcode.php?id=1242

Nun hat dieser Code aber einen kleinen Haken aber ich weiss nicht wie ich das ändern kann. Und zwar basiert das Konstrukt darauf, das der Sender den Anwendungsnamen vom Empfänger weiss. Das ist etwas ungünstig, denn wenn man zwei Empfänger mit dem gleichen Namen hat, dann funktioniert das so nicht mehr sauber.
Ich suche nun eine Möglichkeit, wie ich den Code so umbauen kann, dass anstatt der Applikationsnamen die PID / PorcessID verwendet wird. Diese ID währe eindeutig und man kann sie ganz einfach über GetCurrentProcessID bestimmen.

Kann mir jemand sagen wie ich den Code umbauen muss? :gruebel:

LoRd-MuldeR 3. Nov 2005 12:12

Re: Daten austauschen über ProcessID ?
 
Hi,
an dem Problem saß ich auch schon. Ich denke man kann es lösen, indem man den Window-Handle nicht mit FindWindow sucht, sondern mit Hilfe einer Custom-Message zwischen dem Empfänger und dem Sender Prozess austauscht. Man müsste dafür zunächst eine Custom-Message mit RegisterWindowMessage erstellen (als Name für die Message biete sich ein GUID an) und diese vom Sender an alle Prozesse/Fenster abschicken (HWND_BROADCAST). Auf diese Message reagiert natürlich nur der Empfänger und übergibt als Antwortet dem Sender seinen Window-Handle. Jetzt wo der Sender den Window-Handle des Empfängers kennt, steht der Übertragung via WM_COPYDATA eigentlich nix mehr im Wege.

Ich denke so sollte es gehen, aber ich hab's noch nich implementiert. Sag mal beschied ob's klappt :???:

moelski 3. Nov 2005 12:21

Re: Daten austauschen über ProcessID ?
 
Moin !

Hmm, also ich bin in diesem ganzen API Kram nicht so fitt, das ich deine Idee in Code umsetzen könnte :roll: Aber trotzdem Danke für die Info.
Hat sowas denn noch niemals jemand gemacht? Kann ich ja garnich glauben :gruebel:

LoRd-MuldeR 3. Nov 2005 12:28

Re: Daten austauschen über ProcessID ?
 
Hab im Moment keine Zeit, mich darum zu kümmern. Das Studium und so. Aber in der Platform SDK is das eigentlich alles beschrieben. Wenn du dich mal reinliest, krigst du das sicher hin :wink:

moelski 3. Nov 2005 12:58

Re: Daten austauschen über ProcessID ?
 
Moin !

Aaaalso, wenn ich das nun mal alles zusammenbringe was du sachreibst und was ich gefunden habe, dann könnte es doch so gehen (!?):

1) Wir nehmen den Code hier: http://www.swissdelphicenter.ch/torr...ode.php?id=418 und schicken eine Broadcast Message los.
2) In dieser Broadcast Nachricht packen wir nun mal das Handle der Broadcast-sendenden Anwendung:
MyWndHandle := Application.Handle;
WndHandle := FindWindow(nil, PChar(Application.Title));
(Ich weiss noch nicht genau welches, aber das is wohl auch nich sooo wichtig im Moment).
3) Der Broadcastempfänger hat nun den Handle und nun sollte es klappen.

So und ich hoffe (!?), das passt so zusammen und ich kriege das alles zusammengestrickt :-D

LoRd-MuldeR 5. Nov 2005 13:30

Re: Daten austauschen über ProcessID ?
 
Nee, das FindWindow wollten wir doch grad umgehen :wink:

moelski 5. Nov 2005 14:21

Re: Daten austauschen über ProcessID ?
 
Moin !

Zitat:

das FindWindow wollten wir doch grad umgehen
Ja schon, aber du hast meinen Text nicht richtig gelesen :wink:
Dann ich habe geschrieben:
Zitat:

packen wir nun mal das Handle der Broadcast-sendenden Anwendung
Aber die Sache hat sich mitlerweile erledigt. Ich habe es im Griff. Der Broadcast geht und die empfangende Anwendung meldet sich auch schon wieder zurück.

Ich überlege nun nur wie ich das in eine Unit packe. Habe dazu einen neuen Fred: http://www.delphipraxis.net/internal...ct.php?t=67321

Kannst du da etwas zu sagen?


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