Einzelnen Beitrag anzeigen

Benutzerbild von diabox
diabox

Registriert seit: 13. Sep 2006
61 Beiträge
 
Delphi 2010 Professional
 
#1

Benachrichtigung wenn Prozess gestartet wurde

  Alt 2. Jun 2012, 16:32
Hallo,

ich grübele jetzt seit einiger Zeit daran, wie mein Programm benachrichtigt werden kann, wenn ein bestimmter Prozess (mit Fenster) gestartet wurde.
Dabei sind mir bisher folgende Lösungen unter gekommen:

Überwachung nach EXE:
  • wiederholtes Prüfen, ob sich der Prozess in der Liste aktiver Prozesse befindet:
    CreateToolhelp32Snapshot alle X Sekunden aufrufen und nach szExeFile prüfen.
    Fazit: Doch recht hohe CPU-Last.
  • Beanspruchung der WMI "EventWatching", "Win32_ProcessStartTrace":
    Mit der WMI bin ich ehrlich gesagt noch etwas überfordert und das ist vielleicht auch etwas überdimensioniert.
    Fazit: Neuland

Überwachung nach Fenster:
  • wiederholtes Prüfen, ob sich ein bekannter Fenstername in der Liste der Fenster befindet:
    EnumWindows alle X Sekunden aufrufen und mit GetWindowTitle den Fenstertitel prüfen.
    Fazit: Zwar geringere CPU-Last, aber bestimmt nicht ideal.
  • Benachrichtigung beim "Auftauchen" eines Fenster (SetWinEventHook/SetWindowsHookEx):
    Mit SetWinEventHook habe ich noch nicht gearbeitet, aber das scheint ähnlich wie SetWindowsHookEx zu arbeiten:
    Callback in jedem neuen Prozess der prüft, ob es sich um Prozess X handelt. (Leider wird die Callback-Funktion auch bei anderen Events ausgeführt)
    Fazit: Jeden Prozess mit der Prüfung "belästigen" scheint mir auch nicht ideal.
  • Benachrichtigung beim Erstellen eines Prozess mit Fenster mit eigenem Hook (Registry: AppInit_DLLs):
    Fazit: Wieder sind viele zu Prozesse betroffen.


Das wären so die Ideen, die ich habe. Fällt euch noch etwas anderes ein?

Danke und schönes Wochenende!
Wer zweifelt, detoniert nicht!'
Dieter Nuhr
  Mit Zitat antworten Zitat