Debes usar la función WaitForSingleObject. El problema aquí es que dicha función requiere como parámetro el identificador del proceso que ejecutas y éste no te lo devuelve la función WinExec así que debes ejecutarlo por otrs medios. La siguiente función debe servirte:
Código Delphi
[-]
function ExecuteProcess(ProcessName: String): Cardinal;
var
StartInfo: TStartupInfo;
ProcInfo: TProcessInformation;
begin
Result := 0;
FillChar(StartInfo, SizeOf(StartInfo), 0);
StartInfo.cb := SizeOf(StartInfo);
if CreateProcess(
PChar(ProcessName), nil, nil, nil, false, 0,
nil, nil, StartInfo, ProcInfo)
then
Result := ProcInfo.hProcess;
end;
Un ejemplo de uso:
Código Delphi
[-]
var
Process: Cardinal;
begin
Application.Minimize;
Process := ExecuteProcess('c:\windows\notepad.exe');
if Process <> 0 then
WaitForSingleObject(Process, INFINITE);
Application.Restore;
end;
La aplicación no se restaurará hasta que se cierre el bloc de notas.
// Saludos