27.08.2022, 08:29
|
Активный
|
|
Регистрация: 21.03.2013
Адрес: Приднестровье
Сообщения: 202
Версия Delphi: Delphi 7
Репутация: 10
|
|
Нашёл ответ на свой вопрос... может кому пригодится
Решение такое
Код:
private
{ Private declarations }
procedure GetMessages(var Msg: TWMCopyData); message WM_COPYDATA;
procedure TForm1.GetMessages(var Msg: TWMCopyData);
var
s : string;
Len : Integer;
begin
Len := Msg.CopyDataStruct.cbData div SizeOf(Char);
SetLength(s, Len);
Move(PChar(Msg.CopyDataStruct.lpData)^, PChar(s)^, Len * SizeOf(Char));
Memo1.Lines.Add(s); // Переданный параметр обрабатывается как тебе нужно
end;
В файле .dpr (Project-ViewSource)
Код:
uses
Windows, Messages, Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
var
hMutex : THandle;
procedure SendMessageToFirstInstance(FirstHwnd : HWND; s : string);
var
MesData: TCopyDataStruct;
begin
MesData.cbData := Length(s) * sizeof(char);
MesData.lpData := PChar(s);
SendMessage(FirstHwnd, WM_COPYDATA, 0, LPARAM(@MesData));
end;
begin
hMutex := CreateMutex(nil, True, PChar('BlaBlaBlaVeryUniqueName'));
if GetLastError = ERROR_ALREADY_EXISTS then
begin
SendMessageToFirstInstance(FindWindow('TForm1', nil), ParamStr(1));
Exit;
end;
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
|