Entwickler-Ecke
Windows API - Nachricht an anderes Programm
Peter18 - Mi 07.09.16 12:37
Titel: Nachricht an anderes Programm
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 - Mi 07.09.16 12: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
Peter18 - Mi 07.09.16 13: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 - Mi 07.09.16 13: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 - Mi 07.09.16 14:22
Hallo t.roller,
nochmals Dank; sieht so aus, wie das, was ich brauche.
Grüße von der Nordsee
Peter
Peter18 - Do 08.09.16 09: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 - Do 08.09.16 13: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 - Do 08.09.16 14: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 - Do 08.09.16 15: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:
Delphi-Quelltext
1: 2: 3: 4:
| const cMyMessage = WM_USER + 103;
PostMessage(TargetHandle, cMyMessage, 122, 0); |
Und zum Empfangen:
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? ;)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!