Embarcadero Delphi
Andere Programme ausführen
Suche…
CreateProcess
Die folgende Funktion kapselt Code für die Verwendung von CreateProcess
Windows API zum Starten anderer Programme.
Es ist konfigurierbar und kann warten, bis der aufrufende Prozess abgeschlossen ist oder sofort zurückkehrt.
Parameter:
-
FileName
- vollständiger Pfad zur ausführbaren Datei -
Params
- Befehlszeilenparameter oder leere Zeichenfolge verwenden -
Folder
- Arbeitsordner für das aufgerufene Programm - wenn ausFileName
leerer Pfad extrahiertFileName
-
WaitUntilTerminated
- wenn die Funktion true wartet, bis der Prozess die Ausführung beendet hat -
WaitUntilIdle
- Wenn die Funktion true die Funktion WaitForInputIdle aufruft , und warten, bis der angegebene Prozess die Verarbeitung seiner ursprünglichen Eingabe abgeschlossen hat und keine Benutzereingaben vorliegen -
RunMinimized
- wenn der Prozess "True" minimiert ausgeführt wird -
ErrorCode
- Wenn die Funktion fehlschlägt, enthält sie den gefundenen Windows-Fehlercode
function ExecuteProcess(const FileName, Params: string; Folder: string; WaitUntilTerminated, WaitUntilIdle, RunMinimized: boolean;
var ErrorCode: integer): boolean;
var
CmdLine: string;
WorkingDirP: PChar;
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
Result := true;
CmdLine := '"' + FileName + '" ' + Params;
if Folder = '' then Folder := ExcludeTrailingPathDelimiter(ExtractFilePath(FileName));
ZeroMemory(@StartupInfo, SizeOf(StartupInfo));
StartupInfo.cb := SizeOf(StartupInfo);
if RunMinimized then
begin
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := SW_SHOWMINIMIZED;
end;
if Folder <> '' then WorkingDirP := PChar(Folder)
else WorkingDirP := nil;
if not CreateProcess(nil, PChar(CmdLine), nil, nil, false, 0, nil, WorkingDirP, StartupInfo, ProcessInfo) then
begin
Result := false;
ErrorCode := GetLastError;
exit;
end;
with ProcessInfo do
begin
CloseHandle(hThread);
if WaitUntilIdle then WaitForInputIdle(hProcess, INFINITE);
if WaitUntilTerminated then
repeat
Application.ProcessMessages;
until MsgWaitForMultipleObjects(1, hProcess, false, INFINITE, QS_ALLINPUT) <> WAIT_OBJECT_0 + 1;
CloseHandle(hProcess);
end;
end;
Verwendung der obigen Funktion
var
FileName, Parameters, WorkingFolder: string;
Error: integer;
OK: boolean;
begin
FileName := 'C:\FullPath\myapp.exe';
WorkingFolder := ''; // if empty function will extract path from FileName
Parameters := '-p'; // can be empty
OK := ExecuteProcess(FileName, Parameters, WorkingFolder, false, false, false, Error);
if not OK then ShowMessage('Error: ' + IntToStr(Error));
end;
Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow