TAsyncProcess
Exemple d'utilisation
unit uMain; {$mode objfpc}{$H+} interface uses AsyncProcess, Classes, Controls, Dialogs, Forms, Graphics, StdCtrls, SysUtils; type { TForm1 } TForm1 = class(TForm) Button1: TButton; GroupBox1: TGroupBox; Memo: TMemo; procedure Button1Click(Sender: TObject); private procedure PingAsync; procedure ReceptAProcTerminate(Sender: TObject); procedure ReceptReadData(Sender: TObject); procedure Logf(const Fmt: ansistring; const Args: array of const); public end; var Form1: TForm1; implementation {$R *.lfm} { TForm1 } procedure TForm1.Button1Click(Sender: TObject); begin PingAsync; end; // Execution de la commande -> ping google.fr -t procedure TForm1.PingAsync; var vProc: TAsyncProcess; begin vProc := TAsyncProcess.Create(nil); // Nom de l'executable vProc.Executable := 'ping'; // Ajout des parametres vProc.Parameters.Add('google.fr'); vProc.Parameters.Add('-t'); // -t pour faire un ping perpétuel, on sera obligé de fermer la console pour arrêter le programme vProc.Options := vProc.Options + [poUsePipes, poStderrToOutPut]; vProc.OnTerminate := @ReceptAProcTerminate; // Procedure qui gére la fin de processus vProc.OnReadData := @ReceptReadData; // Procédure qui gére l'affichage des données reçues du processus vProc.Execute; logf('Async.Execute pid=%d', [vProc.ProcessID]); end; // Fin de la commande procedure TForm1.ReceptAProcTerminate(Sender: TObject); var vAP: TAsyncProcess; begin vAP := TAsyncProcess(Sender); try logf('ReceptAProcTerminate pid=%d', [vAP.ProcessID]); finally vAP.Free; end; end; // Réception de données procedure TForm1.ReceptReadData(Sender: TObject); var vAP: TAsyncProcess; vS: string; vB: integer; begin vAP := TAsyncProcess(Sender); vS:=''; vB:=vAP.NumBytesAvailable; if vB>0 then begin setlength(vS, vB); vAP.Output.Read(vS[1], vB); Memo.Lines.Add(vS); end; end; procedure TForm1.Logf(const Fmt: ansistring; const Args: array of const); begin memo.Lines.Add(format(fmt, Args)); end; end.
Sources & Ressources
Vous pourriez laisser un commentaire si vous étiez connecté.