Event beim Starten eines anderen Prozesses

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von VincentTB.

    Event beim Starten eines anderen Prozesses

    Hallo,
    ich kann bei meiner Tastatur einstellen, dass wenn ich zB. BF3 starte sie das "BF3-Profil" aktiviert und somit die Makros richtig eingestellt sind. Irgendwoher muss der Treiber ja wissen, dass ich jetzt BF3 gestartet habe/BF3 aktiviert ist. Genau das will ich mit meinem Programm auch. Wenn "League of Legends.exe" gestartet ist, soll sich mein Programm ebenfalls starten und wenn sich die Anwendung wieder beendet, soll das mein Programm ebenfalls tun (dass geht ja einfach über die Prozessklasse). Der Grund, wieso meine Anwendung mit LoL starten soll, ist, dass mein Programm Information über die Teams anzeigt (wie lolnexus, wenn das einer kennt.).
    Aber das ist eig. egal, ich wollte nur nicht, dass jetzt alle denken, ich will einen Trojaner o. ä. programmieren :D


    Ist das ganze in .Net möglich oder nur in C++?

    (Ich will keinen Timer benutzten)
    Mfg
    Vincent

    Ich weiß, dass ich überprüfen kann, ob ein Prozess gestartet ist oder nicht. Aber ich will ja ein Event, welches mir sagt, dass der Prozess gestartet ist. Sonst müsste ich ja einen Timer verwenden.
    Oder meintest du etwas anderen? :)
    Mfg
    Vincent

    Startest Du den Prozess selbst oder wird der extern gestartet?
    Bei letzterem gibt es kein Event.
    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!
    Ich starte den Prozess nicht selber. Ich dachte, dass geht vielleicht irgendwie mit der WinAPI oder so. Aber okay, wenn ich da gar keine Chance habe muss ich mir wohl etwas anderes einfallen lassen.

    Weiß denn dann irgendjemand, wie das der Treiber meiner Tastatur schafft, oder lässt der auch einfach nen Timer laufen?


    EDIT: Okay, habs nun geschafft, das ist ja fast peinlich einfach: (Verweis auf System.Management wird vorrausgesetzt)

    VB.NET-Quellcode

    1. Imports System.Management
    2. Public Class Form1
    3. Private watcher As ManagementEventWatcher
    4. Protected Overrides Sub OnLoad(e As EventArgs)
    5. MyBase.OnLoad(e)
    6. Dim queryString As String = "SELECT * FROM Win32_ProcessStartTrace"
    7. watcher = New ManagementEventWatcher(New WqlEventQuery(queryString))
    8. AddHandler watcher.EventArrived, New EventArrivedEventHandler(AddressOf ProcessStartEvent)
    9. watcher.Start()
    10. End Sub
    11. Private Sub ProcessStartEvent(sender As Object, e As System.Management.EventArrivedEventArgs)
    12. Dim processId As Integer = Integer.Parse(e.NewEvent.Properties("ProcessId").Value.ToString())
    13. Dim proc As Process = Process.GetProcessById(processId)
    14. If proc.ProcessName = "notepad" Then
    15. MessageBox.Show("Notepad wurde gestartet")
    16. End If
    17. End Sub
    18. Protected Overrides Sub OnClosing(e As System.ComponentModel.CancelEventArgs)
    19. MyBase.OnClosing(e)
    20. Using watcher
    21. watcher.Stop()
    22. End Using
    23. End Sub
    24. End Class


    Danke an alle, die mir geholfen haben :)
    Mfg
    Vincent

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VincentTB“ ()