Autor Beitrag
Peter18
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 489
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: Mi 07.09.16 13:37 
Ein freundliches Hallo an alle,

ich möchte durch ein Überwachungsprogramm eine Nachricht an ein anderes Programm schicken, das auf dem gleichen Rechner läuft. Wie man feststellt, ob das Programm läuft habe ich gefunden, aber keinen Datenaustausch; sollte doch möglich sein?!?!

Ich hoffe jemand kann mir die richtigen Stichworte geben oder vielleicht sogar ein Beispiel.

Grüße von der sonnigen Nordsee

Peter
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 07.09.16 13:51 
Stichwort ist IPC (inter-process communication).

Gängige Verfahren (oder ehemals gängige Verfahren) wären
- Windows Messages (WM_CopyData)
- DDE
- (D)COM
- Files
- Mapped Files
- MailSlots
- (Named) Pipes
- Remote Procedure Calls (RPC)
- Sockets
- Clipboard

und die die ich vergessen habe.

Deine nächste Frage: Welches sollte ich nehmen
Antwort: Kommt drauf an
t.roller
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 118
Erhaltene Danke: 34



BeitragVerfasst: Mi 07.09.16 14:12 
Peter18 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 489
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: Mi 07.09.16 14:18 
Hallo Ralf,

Dank Dir für Deine Antwort! Sie erschlägt einen etwas. Da mir die Eigenschaften nicht geläufig sind, eine Kurze Beschreibung meines Vorhabens:

Ich möchte beim Eintreten eines bestimmten Ereignisses ein anderes Programm auffordern eine bestimmte Mitteilung anzuzeigen. Welche Daten dabei ausgetauscht werden ist noch nicht klar. Im Zweifelsfall reicht ein Byte. Aber die Nachricht soll in "Echtzeit" erscheinen.

Vielleicht hast Du einen Tipp welche Möglichkeit dafür am besten geeignet ist.

Wenn Du eine Übersicht geben kannst, welche Eigenschaften die verschiedenen Möglichkeiten haben, wär das schön. Und wenn ich mich dann noch wieter informieren kann wär es fantastisch, aber vielleicht reichen die Stichworte schon für die weitere Suche.

Grüße von der Nordsee

Peter
Peter18 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 489
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: Mi 07.09.16 14:24 
Hallo t.roller,

Dank auch Dir! Sieht vielversprechend aus. Werd ich mir gleich mal in Ruhe ansehen und melde mich dann wieder.

Grüße von der Nordsee

Peter
Peter18 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 489
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: Mi 07.09.16 15:22 
Hallo t.roller,

nochmals Dank; sieht so aus, wie das, was ich brauche.

Grüße von der Nordsee

Peter
t.roller
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 118
Erhaltene Danke: 34



BeitragVerfasst: Mi 07.09.16 16:31 
Hier ist das gleiche Verfahren übersichtlicher dargestellt:
delphidabbler.com/tips/51
www.swissdelphicente.../showcode.php?id=810

Sonst Demo von
delphi.about.com/lib...code/wm_copydata.zip

WM_COPYDATA ist schnell: 2ms für String, Image oder Record - siehe Anhang.
Einloggen, um Attachments anzusehen!

Für diesen Beitrag haben gedankt: Peter18
Peter18 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 489
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: Do 08.09.16 10:46 
Hallo t.roller,

nochmals Dank für Deine Antwort! Es sieht wirklich so aus, wie das, was ich gesucht habe.

Grüße von der wieder sonnigen Nordsee

Peter
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 08.09.16 14:00 
Wobei du für bis zu zwei Integerwerten auch nur eine simple Message brauchst. WM_COPYDATA brauchst du nur, wenn du mehr übertragen willst.
Peter18 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 489
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: Do 08.09.16 15:27 
Hallo Sebastian,

Dank auch Dir. Wenn ich Dich richtig verstehe geht statt "WM_COPYDATA" auch ein Integerwert? Dann muß aber der Enpfänger wissen, dass es nur eine Zahl ist, oder?

Grüße von der sonnigen Nordsee

Peter
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 08.09.16 16:00 
Du brauchst lediglich ein Fensterhandle. Das kann auch nur ein für diesen Zweck erzeugtes Handle sein wie es TTimer intern macht.

Dann schickst du mit PostMessage (ohne auf Abarbeitung zu warten) oder SendMessage (mit warten) eine selbst definierte Nachricht:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
const
  cMyMessage = WM_USER + 103;

PostMessage(TargetHandle, cMyMessage, 1220);
Und zum Empfangen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
type
  TFormXY = class...
  protected
    procedure WmMyMessage(var Msg: TMessage); message cMyMessage;
  end;

procedure TFormXY.WmMyMessage(var Msg: TMessage);
begin
  ShowMessage(IntToStr(Msg.lParam));
end;


Ach ja: Weil bei dir noch Delphi 4 steht:
Hast du dir eigentlich das bis heute oder so kostenlose brandneue Delphi 10.1 Starter geholt? ;)