Laden...

Reaktion auf das Öffenen eines Programms, aber wie?

Erstellt von Narrow vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.209 Views
N
Narrow Themenstarter:in
26 Beiträge seit 2007
vor 17 Jahren
Reaktion auf das Öffenen eines Programms, aber wie?

Hi Leute,
gleich zum Anfang, ich bin neu hier, also ned böse sein falls ich im falschen Bereich poste.

Also zu meinem Problem,

Ich würde gerne ein Programm programmieren, dass aufzeichnet, wann irgendein Programm gestartet wird und für wie lange es geöffnet ist (ähnlich TaskManager).
Leider habe ich keine Ahnung wie ich eine Reaktion bekomme wenn ein anderes Programm gestartet wird...

falls das zu unverständlich war, es sollte ungefähr so aussehen:


if ( User.Opens.AnyProgramm )
{
     ...
}

gibts dafür einen eigenen Befehl für "User.Opens.AnyProgramm" oder ist das etwas komplizierter?

MfG Narrow

B
1.529 Beiträge seit 2006
vor 17 Jahren

Das kann Windows auch mit Bordmitteln.

Zuerst musst du in "Lokale Sicherheitsrichtlinie\Sicherheitseinstellungen\Lokale Richtlinien\Überwachungsrichtlinie" die Überwachung "Prozessverfolgung überwachen" für "Erfolgreich" aktivieren.

Dadurch wird im Sicherheitslog ein Ereignis mit der Kennung 592 erzeugt, wenn ein neuer Prozess gestartet wurde, nach dem Beenden mit der Kennung 593.
Alles, was dein Programm dann noch tun muss, ist das Sicherheitslog zu überwachen.

N
Narrow Themenstarter:in
26 Beiträge seit 2007
vor 17 Jahren

Danke erstmal für die schnelle antwort,

ich kann mir jetzt ja die Ereignisse in der Ereignisanzeige ansehen, aber wie kann ich die jetzt in mein Programm einbinden bzw. wo werden die log-dateien gespeichert?

G
58 Beiträge seit 2007
vor 17 Jahren

Also wenn ich mich recht erinner müsste man da mit WMI 'dran kommen.
Ist lange her, daher kann ich dir nur son Schlagwort geben.
Aber vielleicht hilfts ja 😉

B
1.529 Beiträge seit 2006
vor 17 Jahren

Mittels System.Diagnostics.EventLog.

EventLog myLog = new EventLog( "Security" );
myLog.EntryWritten += new EntryWrittenEventHandler( myLogWatcher );
myLog.EnableRaisingEvents = true;

// ...

public void myLogWatcher( object sender, EntryWrittenEventArgs e )
{
   // alles über das Event steckt in e.Entry (soll heißen: Breakpoint und einfach mal schauen...
   switch( e.Entry.InstanceID )
   {
      case 592: // Prozess gestartet
         // was auch immer
         break;
      case 593: // Prozess beendet
         // was auch immer
         break;
      default:
         return;
   }
}

EDIT: Achtung, zum Auslesen des Sicherheitslog braucht man Admin- oder System-Rechte. Am besten ist es also, das ganze in einen Service auszulagern.

N
Narrow Themenstarter:in
26 Beiträge seit 2007
vor 17 Jahren

Ah, danke für die Hilfe, kannte mich mit der Materie kaum aus.