N
NightmareTerrible
Здравствуйте, уважаемые дельфисты.
У меня возникла следующая проблема.
Есть приложение, которое можно запускать только в одном экземпляре, однако необходимо поддерживать возможность открытия ассоциированных файлов. Для решения этой задачи использую TCopyDataStruct следующим образом.
Приложение при запуске проверяет, не запущена ли уже его копия, и если да, то передаёт ему параметры командной строки.
В переменной OriChemesWindow хранится дескриптор окна открытого ранее приложения (первой копии). Также существует обработчик этого сообщения:
Процедура описана как
Вроде бы всё должно работать хорошо, но вот проблема: при передаче параметров происходит какая-то ошибка, и часть текста преобразуется в крякозябры, например, во второй копии это был файл D:\Chemes\ver1.4\111temp.ori , а при получении параметров в первой копии получается что-то в роде D:\Chemeﲧ酋癔醀癔
Помогите, пожалуйста, решить эту проблемку. Использую Delphi 2010.
У меня возникла следующая проблема.
Есть приложение, которое можно запускать только в одном экземпляре, однако необходимо поддерживать возможность открытия ассоциированных файлов. Для решения этой задачи использую TCopyDataStruct следующим образом.
Приложение при запуске проверяет, не запущена ли уже его копия, и если да, то передаёт ему параметры командной строки.
Код:
if ParamCount <> 0 then
begin
try
cd.cbData := Length(ParamStr(1));
cd.lpData := PChar(ParamStr(1));
cd.dwData := 0;
WParam := Application.Handle;
LParam := Integer(@cd);
SendMessage(OriChemesWindow, WM_COPYDATA, WParam, LParam);
finally
end;
end;
В переменной OriChemesWindow хранится дескриптор окна открытого ранее приложения (первой копии). Также существует обработчик этого сообщения:
Код:
procedure TOriChemesForm.WMCopyData(var Msg: TWMCopyData);
var
cd:TCopyDataStruct;
FileName : string;
i,len : integer;
begin
// Открываем файл, переданный в качетсве параметра (при открытии второй копии приложения)
cd := Msg.CopyDataStruct^;
FileName := '';
len := cd.cbData;
for i := 0 to len - 1 do
FileName := Filename + (PChar(cd.lpData) + i)^;
if FileExists(FileName) then begin
FileOpen1.Dialog.FileName := FileName;
FileOpen1Accept(nil);
end;
inherited;
end;
Процедура описана как
Код:
procedure WMCopyData(var Msg: TWMCopyData); message WM_COPYDATA;
Вроде бы всё должно работать хорошо, но вот проблема: при передаче параметров происходит какая-то ошибка, и часть текста преобразуется в крякозябры, например, во второй копии это был файл D:\Chemes\ver1.4\111temp.ori , а при получении параметров в первой копии получается что-то в роде D:\Chemeﲧ酋癔醀癔
Помогите, пожалуйста, решить эту проблемку. Использую Delphi 2010.