Danke für die schnelle Hilfe!
Ich habe jetzt mal ein bisschen rumprobiert. Ich habe es geschafft, dass das Programm nur einmal aufgerufen wird, allerdings habe ich immernoch Probleme die Daten zu senden. So sieht mein Code aus:
Delphi-Quellcode:
procedure TForm1.SendParam;
var
aCopyData: TCopyDataStruct;
hTargetWnd: HWND;
begin
with aCopyData
do
begin
dwData := 0;
cbData := StrLen(PChar(ParamStr(1))) + 1;
lpData := PChar(ParamStr(1));
end;
hTargetWnd := FindWindowEx(0, 0,
nil, PChar('
test'));
if hTargetWnd <> 0
then
SendMessage(hTargetWnd, WM_COPYDATA, Longint(
Handle), Longint(@aCopyData))
else
ShowMessage('
No Recipient found!');
end;
procedure TForm1.WMCopyData(
var Msg: TWMCopyData);
var
sText:
array[0..99]
of Char;
begin
StrLCopy(sText, Msg.CopyDataStruct.lpData, Msg.CopyDataStruct.cbData);
label1.Caption := sText;
end;
Initialization
mHandle := CreateMutex(
nil,True,'
test');
if GetLastError = ERROR_ALREADY_EXISTS
then begin
Form1.SendParam;
Halt;
end;
finalization
if mHandle <> 0
then
CloseHandle(mHandle)
end.
Allerdings bekomme ich dann nur einen Fehler ("Runtime error 216 at 00403496"). Leider weiß ich nicht wo ich da nun den Fehler gemacht habe.
@DerDa:
NonVCL wäre da vielleicht echt eine gute Möglichkeit, habe ich bisher noch gar nicht dran gedacht. Allesdings habe ich noch nichts in Richtung
nonVCL gemacht.