Anwendungen überwachen, nicht prozesse

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von littleprogrammer.

    Anwendungen überwachen, nicht prozesse

    Hey Leute,
    Bin neu hier und habe gleich mal eine etwas komplizierte Frage und zwar:
    Wie kann ich überprüfen, ob eine bestimmte Anwendung dabei ist zu starten?
    Bei Prozessen habe ich es bisjetzt schon so weit geschafft:

    VB.NET-Quellcode

    1. Timer1_tick
    2. dim p() as process = process.getprocessesbyname("vlc")
    3. If p.length >0 then
    4. p(0).kill 'Oder sonst was xD
    5. end if
    6. 'Damit beende ich jeden gestarten vlc-Prozess

    Problemdabei: Wenn jetzt jemand die Datei vlc.exe in seinem installierten Ordner auf vlcbla.exe ändert,
    dann öffnet sich der VLC Player wie gewohnt --> Ist klar, da er ja nur nach den Prozessen "vlc" sucht, und nicht nach "vlcbla" .
    Habe auch rumgesucht und das hier dabei gefunden :
    [VB 2008] Prozess überwachung
    Aber ihm wurde nicht geholfen, weil er zu wenig wusste... wie auch immer.
    Überdiesen Thread habe ich dann die

    VB.NET-Quellcode

    1. Process.mainwindowtitle-Eigenschaft
    gefunden die dann den
    Titelnamen des Prozesses angeben soll. Dies funktioniert aber nicht!!! --> Liefert lauter empty-strings zurück! Ja, ich habe es im code getestet!
    Nun war die Idee, den Namen der Anwendung zu überprüfen (beim Task-Manager unter dem Reiter "Anwendungen" denn da hat VLC jedes mal den Namen VLC Media Player!
    Gleich mal geschaut....aber das

    VB.NET-Quellcode

    1. dim a() as application = application.getapplications....
    geht nicht so wie ich das dachte, da gibt es so eine Prozedur nicht.
    Also habe ich
    mit etwas mehr mit Prozessen beschäftigt, von wegen ID und so, aber die ist ja nicht statisch --> also auch keine Lösung
    Jetzt ist die Frage an euch: Gibt es vielleicht ne API-funktion, zum ermitteln aller Anwendungen inklusive dem Titelnamen und des dazugehörigen Prozesses? ö.ä?
    Ich sage schon mal danke im Vorraus! Und bitte vergesst nicht: Ich bin immer noch ein Anfänger in VB ;)
    Gruß littleprogrammer
    Hi

    Also so müsste das eigentlich gehen:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. Dim tmpProcesses() As Process = Process.GetProcesses
    3. For Each i As Process In tmpProcesses
    4. If i.MainWindowTitle = "VLC media player" Then
    5. i.Kill()
    6. End If
    7. Next
    8. End Sub


    Wenn es um ein Prozess geht der keinen MainWindowTitle hat könntest du evtl. auch "MainModule.FileVersionInfo.OriginalFilename" überprüfen. Da das aber nicht bei allen Systemprozessen möglich ist und dann zu Fehlern führt, ist das ein wenig umständlicher.

    Gruss,
    Fletchan
    @Fletchan
    Vielen Dank für die Information!
    Dein eigentlicher Quellcode zum "MainWindowTitle" hat mir nicht weitergeholfen, da es ja sein kann, dass der Prozess kein MainWindowtitle hat.
    Aber dein zusätzlicher Kommentar hat mir dann doch weiter geholfen. :)
    "Process".MainModule.FileVersionInfo.OriginalFilename
    Entweder werde ich das gleich so in mein Programm übernehmen, oder MainModule.FileVersionInfo.ProductName
    Vielen Dank nochmal! Nicht ganz das, was ich gesucht habe, aber es hat mir immerhin weitergeholfen und wird mein Problem wahrscheinlich lösen...
    Für die Fehler packe ich am besten einfach ein Try-Catch drum-herum, oder?! :?:
    @Samus Aran
    Wieso ist das absolut unsauber? Hast du denn etwa eine bessere Lösung?! Wie zum Beispiel eine API-Funktion?!
    Dein Post hat mir nämlich nicht weitergeholfen.
    Ich kann mit c# nix anfangen.
    Würde mich aber freuen, wenn dun mir vielleicht das dazu passende VB.NET Event zeigen könntest. ;)

    littleprogrammer schrieb:

    Wieso ist das absolut unsauber? Hast du denn etwa eine bessere Lösung?! Wie zum Beispiel eine API-Funktion?!
    Hat er doch gepostet - Blind?

    littleprogrammer schrieb:

    Dein Post hat mir nämlich nicht weitergeholfen.
    Sollte er aber. Irgendwas stimmt mit dir nicht. Das Denken können wir dir nicht abnehmen, sorry.

    littleprogrammer schrieb:

    Ich kann mit c# nix anfangen.


    developerfusion.com/tools/convert/csharp-to-vb/

    und jetzt:

    Danke! :)
    Von meinem iPhone gesendet
    Also wie gesagt, ich bin nur ein Anfänger...
    Schade, dass neue Mitglieder und VB-Anfänger gleich so fertig gemacht werden...Hätte mir mehr erhofft von diesem Forum, wobei es wahrscheinlich nicht am Forum liegt, sondern an den Mitgliedern....
    Wie auch immer:
    Ich habe es konvertiert in VB.NET und da kamen einige Fehler, da es "System.Management.ManagementEventWatcher" nicht gibt
    Vielleicht kann mir da jemand weiterhelfen und sagen, wie ich den managementeventwatcher bekomme, denn ich bin zu der Erfahrung gekommen, dass das Prozesseüberwachen über Timer zu langsam ist (Anwendung ist langsam) beziehungsweise mal den ganzen Code schreiben mit ein paar Erklärungen und wie ich die Funktionen aufrufe...Code ist ja bereits vorhanden...
    Danke im Vorraus
    littleprogrammer
    Ps.: @nikeee13
    Wenn ich schreibe, dass mir sein Post nicht weitergeholfen hat, dann ist es doch wohl verständlich, dass ich den Post sehr wohl gesehen habe und nicht blind bin!
    Denken tue ich schon selber, danke. Aber wie gesagt: Ich bin 1. ein Anfänger und 2. ist das Forum eigentlich doch dazu da, um weiterzuhelfen, und sich nicht darüber aufzuregen, wie schlecht die anderen sind, nur weil sie die schwierigen Sachen nicht verstehen...
    hier wird dir geholfen, nur du scheinst zu inkompetent zu sein, die hilfe als solche zu erkennen.

    setze dich mit WMI auseinander, dann musst du auch nciht den C#-code 1-zu-1 übersetzen sondern kannst dir gleich in vb.net etwas eigenes schreiben. zu WMI gibts es hier im forum beiträge, mit denen man prima lernen kann, wenn man denn bereit ist etwas mühe zu investieren: [VB.NET] WMI AUSLESEN



    wenn du nach wie vor nicht im stand bist, mit den hier gebotenen hilfestellungen dein problem zu lösen, bist du scheinbar einfach noch nicht so weit und ich empfehle dir, dein projekt zu pausieren und dich etwas zuzuwenden, das du tatsächlich verstehst.
    Es war nie die Rede davon, dass ich die Hilfe der Mitglieder nicht anerkenne, nur wenn sie mir nicht weiterhilft, dann kann ich dadurch mein Problem nunmal nicht lösen...
    Aber dennoch danke für den Hinweis zum WMI, werde mich da mal ein bisschen reinlesen, und schauen, was sich machen lässt.
    Da ich vermute, dass niemand mehr hier etwas reinschreibt, was mir akut wirklich weiterhilft, kann ich diesen Beitrag auch schließen und als erledigt abhacken.
    Danke.
    littleprogrammer