unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, WbemScripting_TLB, Vcl.StdCtrls; type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; procedure Button1Click(Sender: TObject); private FSink: TSWbemSink; FLocator: ISWbemLocator; FServices: ISWbemServices; procedure EventReceived(ASender: TObject; const objWbemObject: ISWbemObject; const objWbemAsyncContext: ISWbemNamedValueSet); public { Déclarations publiques } end; var Form1: TForm1; implementation {$R *.dfm} { TForm1 } procedure TForm1.Button1Click(Sender: TObject); const WQL = 'SELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE TargetInstance ISA "Win32_Process"'; begin FLocator := CoSWbemLocator.Create; //Connect to the WMI service FServices := FLocator.ConnectServer('.', 'root\cimv2', '','', '', '', wbemConnectFlagUseMaxWait, nil); //create the sink instance FSink := TSWbemSink.Create(self); //assign the event handler FSink.OnObjectReady := EventReceived; //Run the ExecNotificationQueryAsync FServices.ExecNotificationQueryAsync(FSink.DefaultInterface,WQL,'WQL', 0, nil, nil); end; procedure TForm1.EventReceived(ASender: TObject; const objWbemObject: ISWbemObject; const objWbemAsyncContext: ISWbemNamedValueSet); var PropVal: OLEVariant; begin PropVal := objWbemObject; Memo1.Lines.Add(Format('Caption : %s ',[PropVal.TargetInstance.Caption])); Memo1.Lines.Add(Format('ProcessID : %s ',[PropVal.TargetInstance.ProcessID])); end; end.