Man könnte mit WaitForInputIdle() warten, bis der Prozess bereit für Eingaben ist:
Delphi-Quellcode:
uses ..., ShellApi;
function ShellExecBlocking(const FileName: string; const Parameters: string;
const Verb: string; CmdShow: Integer; const Directory: string): Boolean;
var
Sei: TShellExecuteInfo;
Res: LongBool;
Msg: tagMSG;
begin
FillChar(Sei, SizeOf(Sei), #0);
Sei.cbSize := SizeOf(Sei);
Sei.fMask := SEE_MASK_DOENVSUBST or SEE_MASK_FLAG_NO_UI or SEE_MASK_NOCLOSEPROCESS or
SEE_MASK_FLAG_DDEWAIT;
Sei.lpFile := PChar(FileName);
Sei.lpParameters := PCharOrNil(Parameters);
Sei.lpVerb := PCharOrNil(Verb);
Sei.nShow := CmdShow;
Sei.lpDirectory := PCharOrNil(Directory);
Result := ShellExecuteEx(@Sei);
if Result then
begin
WaitForInputIdle(Sei.hProcess, INFINITE);
CloseHandle(Sei.hProcess);
end;
end;
Aber ein Progressbar ist so gut wie unmöglich, da nich absehbar ist, wie lange der Vorgang dauern wird.