Ich weiß nicht...laut
MSDN funktioniert WaitForSingleObject nicht wenn weitere fenster aus dem prozess
heraus entstehen...
Sprich ich hatte so ein ähnliches Problem hier
http://www.delphipraxis.net/162142-t...cute-wait.html
Die Lösung war damals WaitForMultipleObjects
Delphi-Quellcode:
function ExecAndWait(Filename, Params: string; WindowState: word = SW_SHOWNORMAL): boolean;
var
ShExecInfo: SHELLEXECUTEINFO;
r : Cardinal;
const
SEE_MASK_NOASYNC= $100;
begin
Result := false;
if Filename = '' then
exit;
if not FileExists(FileName) then
Begin
ShowMessage('Datei nicht existent!');
Exit;
End;
ZeroMemory(@ShExecInfo, SizeOf(ShExecInfo));
ShExecInfo.Wnd := application.MainFormHandle; //GetForegroundWindow;
ShExecInfo.cbSize := sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_NOASYNC;
ShExecInfo.lpVerb := 'open';
ShExecInfo.lpFile := PChar(Filename);
ShExecInfo.lpParameters := PChar(Params);
ShExecInfo.lpDirectory := PChar(ExtractFileDir(Filename));
ShExecInfo.nShow := WindowState;
Result := ShellExecuteEx(@ShExecInfo);
try
if Result then
begin
repeat
R := MsgWaitForMultipleObjects(1, ShExecInfo.hProcess, False, INFINITE,QS_ALLINPUT);
if r <> WAIT_OBJECT_0 then
Application.ProcessMessages;
until r = WAIT_OBJECT_0;
end
else
Showmessage('Fehler beim Starten der Anwendung:' + Filename +
#13#10'System Fehler: ' + SysErrorMessage(GetLastError));
finally
CloseHandle(ShExecInfo.hProcess);
end;
end;