Hallo und vielen Dank für Eure Antworten
Mit dem Hinweis von Sirthornberry fand ich bei meiner Suche folgenden Code:
Delphi-Quellcode:
/ Sender: Send data
// Sender: Daten schicken
procedure TForm1.Button1Click(Sender: TObject);
var
aCopyData: TCopyDataStruct;
hTargetWnd: HWND;
begin
with aCopyData
do
begin
dwData := 0;
cbData := StrLen(PChar(Edit1.Text)) + 1;
lpData := PChar(Edit1.Text)
end;
// Search window by the window title
// Fenster anhand des Titelzeilentext suchen
hTargetWnd := FindWindowEx(0, 0,
nil, PChar('
WM_COPYDATA-Receiver'));
if hTargetWnd <> 0
then
SendMessage(hTargetWnd, WM_COPYDATA, Longint(
Handle), Longint(@aCopyData))
else
ShowMessage('
No Recipient found!');
end;
(* -------------------------------------------------------------------- *)
// Recipient - Receive data
// Empfänger - Daten empfangen
type
TForm1 =
class(TForm)
private
{ Private declarations }
procedure WMCopyData(
var Msg: TWMCopyData);
message WM_COPYDATA;
public
{ Public declarations }
end;
procedure TForm1.WMCopyData(
var Msg: TWMCopyData);
var
sText:
array[0..99]
of Char;
begin
// generate text from parameter
// anzuzeigenden Text aus den Parametern generieren
StrLCopy(sText, Msg.CopyDataStruct.lpData, Msg.CopyDataStruct.cbData);
// write received text
// Empfangenen Text ausgeben
label1.Caption := sText;
end;
Daraus habe ich zwei Programme erstellt und siehe da, es funktioniert super!!!! In C dürfte es gleich gehen.
'WM_COPYDATA-Receiver' entspricht dem Titel des Fensters der Empfängeranwendung
=> In der Receiveranwendung also (Form1.caption:='WM_COPYDATA-Receiver'; setzen.
Obwohl dieser Code sehr einfach ist, könnte man auf Delphi-Seite trotzdem eine (kleine)Komponente mit Sende und Empfangsroutinen bauen.)
Ach ja, kann der receiver auch daten direkt zurückschicken und der Sender auf diese Nachricht warten, gleich nachem er gesendet hat?
procedure TForm1.Button1Click(Sender: TObject);
var
aCopyData: TCopyDataStruct;
hTargetWnd: HWND;
begin
with aCopyData do
begin
dwData := 0;
cbData := StrLen(PChar(Edit1.Text)) + 1;
lpData := PChar(Edit1.Text)
end;
// Search window by the window title
// Fenster anhand des Titelzeilentext suchen
hTargetWnd := FindWindowEx(0, 0, nil, PChar('WM_COPYDATA-Receiver'));
if hTargetWnd <> 0 then
begin
SendMessage(hTargetWnd, WM_COPYDATA, Longint(
Handle), Longint(@aCopyData))
lies rückgabewerte des Receivers
end
else
ShowMessage('No Recipient found!');
end;
Vielen Dank
!!! und beste Grüsse
Geri