Embarcadero Delphi
Andere programma's uitvoeren
Zoeken…
CreateProcess
De volgende functie bevat code voor het gebruik van CreateProcess
Windows API voor het starten van andere programma's.
Het is configureerbaar en kan wachten tot het oproepproces is voltooid of onmiddellijk terugkeren.
parameters:
-
FileName
- volledig pad naar uitvoerbaar -
Params
- opdrachtregelparameters of gebruik een lege string -
Folder
- werkmap voor opgeroepen programma - als een leeg pad wordt geëxtraheerd uitFileName
-
WaitUntilTerminated
- als de echte functie wacht tot het proces isWaitUntilTerminated
-
WaitUntilIdle
- als de true-functie de functie WaitForInputIdle aanroept en wacht totdat het opgegeven proces de eerste invoer heeft verwerkt en totdat er geen gebruikersinvoer in behandeling is -
RunMinimized
- als het ware proces minimaal wordt uitgevoerd -
ErrorCode
- als de functie mislukt, bevat dit de Windows Error Code
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;
Gebruik van bovenstaande functie
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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow