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!