Entwickler-Ecke

Windows API - Mittels WMI application start abfangen


lukkee - Mi 13.08.08 22:02
Titel: Mittels WMI application start abfangen
Hallo
Ich hab gelesen das man mittels WMI abfagen kann ob ein prozess gestartet oder beendet wurde.

Also ich will praktisch überwachen ob ein neuer Prozess gestartet wurde> dannach sollte mein programm eine message ausgeben "soll dieser prozess "prozess.exe" gestartet werden".

Ich hab im forum ein gutes hook beispiel gefunden aber ich will es ohne hooks machen!

In einem anderen Forum hab ich ein Beispiel gefunden das mit WMI läuft jedoch funktioniert das nicht.

hier der code:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
type 
  TForm1 = class(TForm) 
    procedure FormCreate(Sender: TObject); 
  private 
    { Private declarations } 
  public 
    { Public declarations } 
    aSink     : TSWbemSink; 
    aLocator  : TSWbemLocator; 
    aServices : SWbemServices; 
    procedure ProcessCreated(Sender: TObject; var objWbemObject, objWbemAsyncContext: OleVariant); 
  end



procedure TForm1.FormCreate(Sender: TObject); 
begin 
  aLocator := TSWbemLocator.Create(Self); 
  aServices := aLocator.ConnectServer('''root\cimv2'''''''''0nil); // connect to the local computer 

  aSink := TSWbemSink.Create(Self); // sink-objects are used for asynchronous method-calls 
  aSink.OnObjectReady := ProcessCreated; 

  aServices.ExecNotificationQueryAsync(aSink.DefaultInterface, 
      'SELECT * FROM __InstanceCreationEvent within 0.1 WHERE TargetInstance ISA "Win32_Process"'
      'WQL'0nilnil); // every creation of a Win32_Proces-Object should be notified 
end

procedure TForm1.ProcessCreated(Sender: TObject; var objWbemObject, objWbemAsyncContext: OleVariant); 
begin 
  ShowMessage('ProcessCreated'); 
end;


Wie schon erwähnt habe ich die WMI Scriping libary schon eingebunden!!

Der fehler kommt aber in dieser Zeile

Delphi-Quelltext
1:
  aSink.OnObjectReady := ProcessCreated;                    


[Fehler] mainfrm.pas(43): Inkompatible Typen: 'Liste der Parameter ist unterschiedlich'


Wie gehört die ObjectReady richtig definiert ?
Hab schon so vieles probiert :( bin schon fast am verzweifeln :(


hat jemand ne idee?


greetz


Delete - Mi 13.08.08 23:02

Hier ist was Brauchbares:

WMIEvents
http://derentwickler.de/itr/ausgaben/psfile/datei/4/frischalow41af302335b2f.zip