Embarcadero Delphi
Kör andra program
Sök…
CreateProcess
Följande funktion kapslar in koden för att använda CreateProcess
Windows API för att starta andra program.
Det är konfigurerbart och kan vänta tills samtalsprocessen är klar eller återgår omedelbart.
parametrar:
-
FileName
- full sökväg till körbar -
Params
- kommandoradsparametrar eller använd tom sträng -
Folder
- arbetsmapp för kallat program - om tom sökväg kommer att extraheras frånFileName
-
WaitUntilTerminated
- om sann funktion väntar på att processen ska slutföra körningen -
WaitUntilIdle
- om true-funktionen kommer att ringa WaitForInputIdle- funktionen och vänta tills den angivna processen är klar med att bearbeta sin första ingång och tills det inte finns någon användarinmatning väntar -
RunMinimized
- om verklig process kommer att köras minimerad -
ErrorCode
- om funktionen misslyckas kommer den att innehålla Windows Felkod
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;
Användning av funktionen ovan
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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow