Задача - открыть файл в ассоциированной в системе программе и дождатся завершения этой программы. Решаю таким образом:
function TImgEditor.OpenPictureThread(Sender: PThread): Integer;
var
SI: TShellExecuteInfo;
begin
FillChar(SI, SizeOf(SI), 0);
with SI do
begin
cbSize := SizeOf(SI);
fMask := SEE_MASK_NOCLOSEPROCESS;
Wnd := Form.Handle;
lpFile := Sender.Data;
nShow := SW_SHOW;
end;
if ShellExecuteEx(@SI) then WaitForSingleObject(SI.hProcess, INFINITE);
DeleteFile(Sender.Data);
FreeMem(Sender.Data);
end;
в принципе все работает верно, толко в приложении происходит затык после выполениния WaitForSingleObject по идеи "замирать" должен только поток в котором был вызов этой функции или я что-то путаю?
поток создает следующий код:
procedure TImgEditor.OpenPicture;
var
FileName: string;
s: pointer;
begin
with NewThread^ do
begin
AutoFree := true;
OnExecute := OpenPictureThread;
case Id3Tag.Pictures[ImageIndex].PictureFormat of
pfJpeg: FileName := TempNameValid('.jpg');
pfPNG: FileName := TempNameValid('.png');
else FileName := TempNameValid('.jpg');
end;
if FileName <> '' then
begin
SaveImage(FileName);
GetMem(s, length(FileName) + 10);
StrCopy(s, PChar(FileName));
Data := s;
Resume;
MsgOK('dfsada');
end;
end;
end;