Показать сообщение отдельно
  #3  
Старый 27.08.2022, 08:29
Gareth Gareth вне форума
Активный
 
Регистрация: 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.
Ответить с цитированием