Wie Taskleiste aktualisieren?

  • VB.NET
  • .NET (FX) 1.0–2.0

Es gibt 19 Antworten in diesem Thema. Der letzte Beitrag () ist von Cheffboss.

    Wie Taskleiste aktualisieren?

    Moin! :)
    Ich suche eine Möglichkeit, die Taskleiste zu aktualisieren.
    Aus folgendem Grund „Wenn ich ein bestimmten Prozess beende“, mit Close.
    Wird der Prozess beendet, ist aber noch in der Taskleiste zu sehen.
    Erst mit einem Klick auf diesem, wird das Programm nicht mehr angezeigt!
    Deshalb suche ich bereits schon stundenlang, nach einer Lösung.
    Ich hoffe es ist Technisch möglich mein vorhaben.
    Freue mich auf eure gute Hilfe!
    BIG THX
    Visual Basic.NET 8o
    MS-SQL
    8o
    Wenn ich ein laufendes VB.NET-Programm mit DerProzess.Close bearbeite, passiert gar nix. Bei DerProzess.CloseMainWindow ist das Programm beendet und der Taskleisteneintrag weg. Daher kann ich das Problem nicht nachstellen. Oder meinst Du das TrayIcon neben der Uhr?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @Cheffboss Beantworte diese Frage:

    VaporiZed schrieb:

    Oder meinst Du das TrayIcon neben der Uhr?
    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!
    Nachdem ich jetzt rausgefunden habe, wie ich da rankomme: Diagnostics.Process.GetProcessesByName("Microsoft.Msn.Weather"), fast die gleiche Sache wie in Post#2: Mit Close passiert nix. Allerdings werd ich das Teil auch nur mit Kill los, da es offiziell kein klassisches MainWindow hat.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @RodFromGermany
    @VaporiZed
    Danke, für die Antwort. :)
    Das TrayIcon neben der Uhr meine ich nicht.
    Sondern das Fenster(ICON) in der Taskleiste.

    Ich hoffe es findet sich noch eine andere Lösung.
    Mir fällt spontan folgendes ein:
    • Ist Prozess eine APP dann Kill.
    • Taskleiste irgendwie aktualisieren.

    Oder meint ihr das, dies nicht möglich ist? ?(
    Und ich damit leben muss, das wenn man eine App-Beendet,
    immer noch das blöde Icon zu sehen ist.
    Dieser aber auf klick, wieder verschwindet.
    Visual Basic.NET 8o
    MS-SQL
    8o
    Ich weiß nicht, was ich noch schreiben soll, aber ich habe das Gefühl, dass wir andeinander vorbeischreiben.
    Ich habe Windows 10 20H2.
    Ich öffne die Wetter-App, Bild 1
    Ich sehe Bild 2.
    Ich kill das Teil mit Diagnostics.Process.GetProcessesByName("Microsoft.Msn.Weather").First.Kill
    Dann ist das Fenster weg und das Icon in der Taskleiste (Bild 3)
    (meh, doofe Bilderreihenfolge; man beachte einfach den Dateinamen)

    Was ist bei Dir anders?
    Bilder
    • Bild 3.jpg

      24,49 kB, 354×373, 110 mal angesehen
    • Bild 1.jpg

      16,35 kB, 598×215, 75 mal angesehen
    • Bild 2.jpg

      30,81 kB, 596×605, 82 mal angesehen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed
    Danke, für deine Antwort. :)
    Wir schreiben uns nicht aneinander vorbei.
    Ich habe nun meinen Code und ein Screenshort hinzugefügt.
    Wenn ich „CloseMainWindow()“ aufrufe bleibt das ICON vorhanden, in der Taskleiste.
    Auf klick, geht das ICON wieder weg.
    Deshalb suche ich eine Lösung.
    Zum Beispiel Prüfe ob Prozess eine App ist, falls Ja dann Kill.
    Oder einen Code um die Taskleiste zu aktualisieren.
    Bis jetzt habe ich aber leider nichts gefunden, habe bereits gegoogelt.


    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. ProzesseJetztBeenden("Microsoft.Msn.Weather", True)
    3. End Sub
    4. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    5. ProzesseJetztBeenden("Microsoft.Msn.Weather", False)
    6. End Sub
    7. Private Sub ProzesseJetztBeenden(wert As String, Vorgang As Boolean)
    8. Try
    9. For Each prozess In Process.GetProcessesByName(wert)
    10. If Vorgang Then
    11. prozess.CloseMainWindow() ' ICON bleibt, bis auf klick.
    12. ' If Prozess eine App dann Kill
    13. ' Oder, Taskleiste aktualsieren
    14. Else
    15. prozess.Kill() ' ICON geht weg.
    16. End If
    17. Next
    18. Catch
    19. End Try
    20. End Sub



    Visual Basic.NET 8o
    MS-SQL
    8o
    Ich kann wohl nicht helfen. Dein Code bewirkt mit CloseMainWindow bei mir gar nichts. Laut Compiler ist das MainWindowHandle der Wetter-App bei mir Null, siehe Bild. Daher läuft diese Codezeile ins Leere.
    Bilder
    • Weather.png

      21,15 kB, 762×206, 81 mal angesehen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    muss du anpassen

    VB.NET-Quellcode

    1. Imports System.ServiceProcess
    2. Public Class Form1
    3. Dim start As Diagnostics.Process
    4. Dim mainPath As String = "C:\Program Files\Windows NT\Accessories\wordpad.exe"
    5. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    6. 'starte
    7. start = New Diagnostics.Process
    8. start.StartInfo.WindowStyle = ProcessWindowStyle.Maximized
    9. start.StartInfo.FileName = mainPath
    10. start.Start()
    11. End Sub
    12. Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    13. 'beende
    14. If start.CloseMainWindow() Then
    15. start.WaitForExit(10000)
    16. End If
    17. If Not start.HasExited Then
    18. start.Kill()
    19. End If
    20. End Sub
    21. End Class
    Uuund was hat das mit dem Problem zu tun, dass sich die Wetter-App mit Close bzw. CloseMainWindow nicht beenden lässt (meine Aussage) bzw. dass sie beendet wird, aber eine Iconleiche in der Taskleiste zurücklässt (Cheffboss' Aussage)?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @Kasi
    Danke, aber leider hilft mir dieser Code auch nicht weiter.

    Soweit ich mich informiert habe, gibt es kein Taskleiste-Update Befehl.
    Nun versuche ich, irgendwie herauszufinden ob ein Programm eine App oder Desktop-Anwendung ist.
    Bis jetzt habe ich dazu auch keine Infos gefunden.
    Ich suche weiter, und gebe mein Ergebnis dann bekannt.
    :P
    Visual Basic.NET 8o
    MS-SQL
    8o
    Vielleicht hilft das?

    GetPackageFamilyName

    When running under UWP GetPackageFamilyName will return ERROR_SUCCESS while under Win32 it will return APPMODEL_ERROR_NO_PACKAGE, which btw is 15700 (decimal) if you're on an older SDK.

    Determine if C++ application is running as a UWP app in Desktop Bridge (Project Centennial)
    @Bluespide
    Danke, für den Link. :)
    Aber leider könnte das mein Problem auch nicht lösen.

    @an alle
    Ich habe verschiedenes getestet, bis jetzt ohne Erfolg!
    Aber ich habe eine Idee, irgendwie muss ich an den
    Objektname der App kommen.
    Und dann prüfen ob der Objektname in „C:\program files\windowsapps\“ ist.
    Leider komme ich aber nicht an die Eigenschaft Objektname ran.
    Weiß jemand, wie man diese auslesen kann? ?(

    Visual Basic.NET 8o
    MS-SQL
    8o
    Meine Güte ! Mal wieder klassischer @Cheffboss Code! :S <X :cursing: :D

    Miese Benamung (auf die Parameter bezogen), da wenig aussagekräftig bzw. eher in die Irre führend.
    Inkonsistente Benamungsregeln (Parameter mal groß, mal klein geschieben).
    Unnötiger und eher hinderlicher Try Catch Block.
    Scheinbar verstehst du deinen eigenenen code nichtmal zur hälfte, obwohl du ja nicht erst seit ein paar Wochen programmierst.

    VB.NET-Quellcode

    1. Private Sub ProzesseJetztBeenden(wert As String, Vorgang As Boolean)
    2. Try
    3. For Each prozess In Process.GetProcessesByName(wert)
    4. If Vorgang Then
    5. ' Wenn 'Vorgang' = False, wird ist die Methode niemals aufgerufen !
    6. prozess.CloseMainWindow()
    7. Else
    8. ' Wenn 'Vorgang' = True, wird ist die Methode niemals aufgerufen !
    9. prozess.Kill()
    10. End If
    11. Next
    12. ' Ergo, totaler Unfug !
    13. Catch
    14. End Try
    15. End Sub


    Wenn du immer nur irgentwas zusammen frickelst, bleibt deine Lernkurve eben flach.
    Wenn du aber mal damit anfangen würdest, deinen code zu verstehen, und lernen würdest zu debuggen,
    würde deine Lernkurve exponential ansteigen !

    Mein Vorschlag, mit WetterApp getestet:
    Ich würde einen Prozess nicht einfach abwürgen, sondern den Anweder erst fragen, ob das gewünscht ist, daher die MessageBox.

    VB.NET-Quellcode

    1. ''' <remarks>Try to close MainWindow by 'Process.CloseMainWindow()'
    2. ''' and wait for exit a several milliseconds '_waitForExitBeforeKill'.
    3. ''' If that fails ('Process.CloseMainWindow()' or 'Process.WaitForExit()' = False and '_askForKill' = True),
    4. ''' then the process will be killed by 'Process.Kill()'.</remarks>
    5. Private Sub ExitProcessByName(_processName As String, _waitForExitBeforeKill As Integer, Optional _askForKill As Boolean = False)
    6. For Each process As Process In Process.GetProcessesByName(_processName)
    7. If process.CloseMainWindow() Then
    8. If process.WaitForExit(_waitForExitBeforeKill) Then Exit Sub
    9. End If
    10. If Not process.HasExited Then
    11. If Not _askForKill Then
    12. process.Kill()
    13. Else
    14. If MessageBox.Show($"Can't exit {_processName}.{Environment.NewLine}Do you want kill the process ?",
    15. Application.ProductName,
    16. MessageBoxButtons.YesNo,
    17. MessageBoxIcon.Question) = DialogResult.Yes Then
    18. process.Kill()
    19. End If
    20. End If
    21. End If
    22. Next
    23. End Sub
    @FormFollowsFunction
    Danke, für die Tipps mit den Benennungs-Regeln. :thumbup:
    Leider hilft mir der Code nicht weiter.

    @an alle
    Freue mich falls ich jemand finde, der mir helfen kann.
    Mein Vorhaben habe ich, oben beschreiben.
    Hoffe dass es technisch möglich ist und das keine ICON Leichen zurück bleiben,
    wenn man eine App beendet(z.B Wetterapp).

    Marktplatz: :!:
    Programmierer - Für eine kleine Funktion die Prüft welche Anwendungstyp es ist.
    Visual Basic.NET 8o
    MS-SQL
    8o
    @an alle
    Danke, für eure Antworten. :thumbup:
    Ich habe nun ein Lösungsweg gefunden, bitte prüft ob dieser gut ist.
    Falls jemand, noch Verbesserungen hat, immer gerne!
    Ich möchte diesen Thread hier beenden, und alle weitere Fragen und Antworten auf diesen
    Thread auslagern.

    Link:
    Programmierer - Für eine kleine Funktion die Prüft welche Anwendungstyp es ist.
    Ich hoffe das geht in Ordnung, damit jetzt nicht 2 Threads verwendet werden, und wir die Übersicht verlieren.
    Visual Basic.NET 8o
    MS-SQL
    8o