СообЧа > База Знаний > Программирование > Delphi

Вопрос

Как дождаться завершения программы, запущенной ShellExecute?

Ответ

Вот так:
uses
ShellAPI;

procedure TForm1.Button1Click(Sender: TObject);
var
    ProcInfo: PShellExecuteInfo;
begin
    (Sender as TControl).Enabled := False;
    GetMem(ProcInfo, SizeOf(ProcInfo^));
    with ProcInfo^ do begin
      Wnd := Handle;
      cbSize := SizeOf(ProcInfo^);
      lpFile := PChar('notepad.exe');
      lpParameters := nil;
      lpVerb := 'open';
      nShow := SW_SHOW;
  fMask := SEE_MASK_DOENVSUBST or SEE_MASK_NOCLOSEPROCESS;
    end;
    try
    Win32check(ShellExecuteEx(ProcInfo));
    while not Application.Terminated and
(WaitForSingleObject(ProcInfo.hProcess, 100)=WAIT_TIMEOUT) do
    Application.ProcessMessages;
    finally
 if ProcInfo.hProcess <> 0 then CloseHandle(ProcInfo.hProcess);
        Dispose(ProcInfo);
   (Sender as TControl).Enabled := True;
    end;
end;

Из конференции Delphi



Copyright © 2000-2004 Сообщество Чайников
Контактная информация