Ein externes Programm ausführen und warten, bis dieses beendet ist
Dies erreicht man mit folgender Funktion:
Die Unit
ShellAPI muss hinzugefügt werden.
Code:
procedure ShellExecAndWait(dateiname: string; Parameter: string);
var executeInfo: TShellExecuteInfo;
dw: DWORD;
begin
FillChar(executeInfo, SizeOf(executeInfo), 0);
with executeInfo do
begin
cbSize := SizeOf(executeInfo);
fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_DDEWAIT;
Wnd := GetActiveWindow();
executeInfo.lpVerb := 'open';
executeInfo.lpParameters := PChar(Parameter);
lpFile := PChar(dateiname);
nShow := SW_SHOWNORMAL;
end;
if ShellExecuteEx(@executeInfo) then
dw := executeInfo.HProcess
else
begin
ShowMessage('Fehler: ' + SysErrorMessage(GetLastError));
Exit;
end;
while WaitForSingleObject(executeInfo.hProcess, 50) <> WAIT_OBJECT_0 do
Application.ProcessMessages;
CloseHandle(dw);
end;
Beispielaufruf:
ShellExecAndWait('C:\Windows\notepad.exe', nil);