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:
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 public 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', '', '', '', '', 0, nil); aSink := TSWbemSink.Create(Self); aSink.OnObjectReady := ProcessCreated;
aServices.ExecNotificationQueryAsync(aSink.DefaultInterface, 'SELECT * FROM __InstanceCreationEvent within 0.1 WHERE TargetInstance ISA "Win32_Process"', 'WQL', 0, nil, nil); 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