Embarcadero Delphi
Exécuter d'autres programmes
Recherche…
CreateProcess
La fonction suivante encapsule le code d'utilisation de l'API Windows CreateProcess
pour lancer d'autres programmes.
Il est configurable et peut attendre que le processus d'appel se termine ou qu'il revienne immédiatement.
Paramètres:
-
FileName
- chemin d'accès complet à l'exécutable -
Params
- paramètres de ligne de commande ou utiliser une chaîne vide -
Folder
- dossier de travail pour le programme appelé - si le chemin vide sera extrait deFileName
-
WaitUntilTerminated
- si la fonction true attendra que le processus termine son exécution -
WaitUntilIdle
- si la fonction true appelle la fonction WaitForInputIdle et attend que le processus spécifié ait fini de traiter son entrée initiale et jusqu'à ce qu'il n'y ait plus de saisie utilisateur en attente -
RunMinimized
- si le vrai processus sera exécuté minimisé -
ErrorCode
- si la fonction échoue, cela contiendra le code d'erreur Windows rencontré
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;
Utilisation de la fonction ci-dessus
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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow