Как дождаться завершения программы, запущенной ShellExecute
Как дождаться завершения программы, запущенной ShellExecute
Как дождаться завершения программы, запущенной ShellExecute uses ShellAPI; procedure TForm1.Button1Click(Sender: TObject); var ProcInfo: PShellExecuteInfo; begin (Sender as TControl).Enabled := False; GetMem(ProcInfo, SizeOf(ProcInfo^)); ZeroMemory(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;