Exécuter des scripts batch ou des commandes système depuis une application
Cette unité fournit la classe utilitaire TCmdPipeExecutor qui permet de lancer cmd.exe en arrière-plan depuis une application VCL, d’envoyer des commandes via stdin, de capturer stdout/stderr à travers des pipes anonymes, et de récupérer le code de sortie du processus.
Exemple d’utilisation simple (dans une Form VCL)
uses
UnitCmdPipeExecutor, System.Classes, Vcl.StdCtrls;
procedure TForm1.ButtonRunClick(Sender: TObject);
var
Executor: TCmdPipeExecutor;
Commands: TStringList;
Output: string;
ExitCode: DWORD;
begin
Executor := TCmdPipeExecutor.Create;
Commands := TStringList.Create;
try
// Exemple : liste de commandes batch
Commands.Add('echo Début du script');
Commands.Add('dir C:\Windows'); // commande montrant la sortie
Commands.Add('echo Fin du script');
// Exécute via cmd.exe, fenêtre cachée, encodage OEM (UseUtf8 = False), timeout 10s
if Executor.ExecuteCmdAndCapture(Commands, Output, ExitCode, True, False, 10000) then
begin
ShowMessage(Format('Sortie (%d octets) - ExitCode=%d'#13#10'%s', [Length(Output), ExitCode, Output]));
end
else
ShowMessage('Erreur: impossible de lancer cmd.exe.');
finally
Commands.Free;
Executor.Free;
end;
end;Exemple avec TMemo (utilisation directe de ExecuteFromMemo)
procedure TForm1.ButtonRunFromMemoClick(Sender: TObject);
var
Executor: TCmdPipeExecutor;
begin
Executor := TCmdPipeExecutor.Create;
try
// SourceMemo contient les commandes (une par ligne)
// DestMemo affichera la sortie et le code de retour
Executor.ExecuteFromMemo(SourceMemo, DestMemo, True, False, 15000);
finally
Executor.Free;
end;
end;Liens de téléchargement : CmdPipeExecutor.zip
Un petit clic (J'aime) qui fait plaisir !