Con el siguiente procedimiento podemos ejecutar una determinada aplicación y, opcionalmente, esperar a que la misma termine para luego retomar el control desde nuestro programa:
Código Delphi
[-]
uses
Forms, ShellApi;
procedure EjecutarExe(const ruta,
args: string; esperar: boolean);
var
salida: DWord;
PSEI: PShellExecuteInfo;
SEI: TShellExecuteInfo;
begin
if not FileExists(ruta)
then Exit;
with SEI do begin
hInstApp := 0;
lpVerb := nil;
lpDirectory := nil;
nShow := SW_NORMAL;
cbSize := SizeOf(SEI);
lpFile := PChar(ruta);
wnd := GetDesktopWindow;
lpParameters := Pchar(args+#0);
fMask := SEE_MASK_NOCLOSEPROCESS;
end;
PSEI:= @SEI;
ShellExecuteEx(PSEI);
if not esperar then Exit;
repeat
salida := WaitForSingleObject(
SEI.hProcess, 500);
Application.ProcessMessages;
until (salida <> WAIT_TIMEOUT);
end;