Anwendungslog - Auslesen der Anwendungen aus Taskmanager

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Wüschd.

    Anwendungslog - Auslesen der Anwendungen aus Taskmanager

    Hallo,

    mein Hauptziel ist ein Anwendungslog, also wan welche Anwendung gestartet wurde und wann wieder beendet wird. Jedoch habe ich shcon ein Problem mit dem Auslesen der Anwendungen. Ich weiß dieses Thema wurde schon öfter angesprochen, leider haben mich die Antworten nicht unbedingt weitergebracht.

    Mit diesm Code:

    VB.NET-Quellcode

    1. For Each oProcess As Process In Process.GetProcesses
    2. If oProcess.MainWindowTitle IsNot Nothing AndAlso oProcess.MainWindowTitle <> String.Empty Then
    3. ListBox1.Items.Add(oProcess.Id)
    4. ListBox1.Items.Add(oProcess.ProcessName)
    5. ListBox1.Items.Add(oProcess.MainWindowTitle)
    6. End If
    7. Next


    bekomme ich schon die benötigten Informationen. Doch da ich somit über die Prozesse auf die Anwendungen zugreife, wird in dem Fall das ich z.B. zwei Firefoxfenster öffne nur einmal der MainWindowTitel ausgegeben, da ja beide Fenster unter dem gleichen Prozess laufen.
    Ähnlich auch bei offenen Ordnern, diese werden bei den Anwendungen angezeigt, werden aber nicht als Prozess angezeigt und somit mit diesem Code nicht ausgelesen.

    Meine Frage also, kennt jemand noch einen anderen Weg die Anwendungen im Taskmanager auszulesen oder wie ich den vorhandenen Code verbessern könnte, damit ich de bisher nicht aufgenommenen Anwendungen verzeichnen kann?

    mfg
    Wüschd
    Wie wäre es so:

    VB.NET-Quellcode

    1. For Each oProcess As Process In Process.GetProcesses
    2. If Not String.IsNullOrEmpty(oProcess.MainWindowTitle) Then
    3. ListBox1.Items.Add(oProcess.Id)
    4. ListBox1.Items.Add(oProcess.ProcessName)
    5. ListBox1.Items.Add(oProcess.MainWindowTitle)
    6. Else
    7. ListBox2.Items.Add(oProcess.Id)
    8. ListBox2.Items.Add(oProcess.ProcessName)
    9. End If
    10. Next
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    danke für die antwort, so hab ichs aber nicht gemeint.

    Laut dem Code trenne ich ja nur die Prozesse die auch bei anwendungen stehen (Listbox1) von den anderen Prozessen, die nur unter Prozesse sichtbar sind (Listbox2)

    Was ich eigentlich wollte sind die Anwendungen im Taskmanager, die nicht unter Prozesse aufgeführt sind wie Ordner oder das zweite Firefoxfenster (dies läuft jaunter dem selben Prozess wie das erste)

    also eigentlich alles was der Benutzer als Fenster vor sich sehen kann
    Dann gib genau diese Fenster aus:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. For Each oProcess As Process In Process.GetProcesses
    3. If Not String.IsNullOrEmpty(oProcess.MainWindowTitle) Then
    4. 'ListBox1.Items.Add(oProcess.Id)
    5. 'ListBox1.Items.Add(oProcess.ProcessName)
    6. ListBox1.Items.Add(oProcess.MainWindowTitle)
    7. End If
    8. Next
    9. End Sub
    Bilder
    • Prozesse.jpg

      20,85 kB, 732×257, 170 mal angesehen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Das ist doch wieder genau dasselbe was mein code auch hervorbringt.
    Doch wenn du jetzt z.B. zwei Firefox Fenster aufmacht, wird nur eines davon angezeigt.
    Genauso die offenen Ordner werden durch diesen Code nicht in die Listbox mitaufgenommen.
    1) Du kannst mit EnumWindow / EnumChildWindow API Funktionen alle geöffneten Anwendungen aufliesten (Source von Kanagroo findest in Forum)
    2) Du kannst mit Spy++ Taskmenager und Listview handle auslesen und mit ListView Nachrichten alle Einträge aufliesten ( das wird für dich zu kompleziert)

    oder schau dir genau Process klassen an.