\\ В
файле проекта:
var
i: integer;
hMainForm:hwnd;
copyDataStruct:TCopyDataStruct;
ParamString:string;
WParam,LParam:integer;
begin
\\
ищем главное окно приложения, вместо Caption - nil,
\\ поскольку к заголовку
главного окна может добавиться заголовок MDIChild
\\ (нужно позаботиться об
уникальности имени класса главной формы)
hMainForm:= FindWindow('TMainForm',nil);
if hMainForm = 0 then
begin
Application.Initialize;
Application.CreateForm(TFrmMain,frmMain);
for i:=1 to ParamCount
do
TMainForm(Application.MainForm).OpenFile(ParamStr(i));
Application.Run;
end
else
begin
ParamString:='';
for i:=1 to ParamCount
do
begin
\\ запихиваем все параметры в
одну строку с разделителями ?13
ParamString:=ParamString+ParamStr(i)+ #13;
end;
\\ создаем запись типа
TCopyDataStruct
CopyDataStruct.lpData:=PChar(ParamString);
CopyDataStruct.cbData:=Length(ParamString);
CopyDataStruct.dwData:=0;
WParam:=Application.Handle;
LParam:=Integer(@CopyDataStruct);
\\
отсылаем сообщение WM_COPYDATA главному окну открытого приложения
SendMessage(hMainForm,WM_CopyData,WParam,LParam);
Application.Terminate;
end;
end.
\\
Обработчик сообщения WM_COPYDATA
procedure
TMainForm.CopyData(var Msg: TWMCopyData);
var
ParamStr:string;
CopyDataStructure:TCopyDataStruct;
i:integer;
len:integer;
begin
CopyDataStructure:= Msg.CopyDataStruct^;
ParamStr:='';
len:= CopyDataStructure.cbData;
for i:=0 to len-1 do
begin
ParamStr:=ParamStr+(PChar(CopyDataStructure.lpData)+i)^;
end;
i:=0;
while not(Length(ParamStr)=0)
do
begin
if isDelimiter(#13,ParamStr,i)
then
begin
OpenFile(Copy(ParamStr,0,i-1));
ParamStr:=Copy(ParamStr,i+1,Length(ParamStr)-i-1);
end;
inc(i);
end;
inherited;
end;
\\
проверено, работает.