ahstax
Goto Top

Taskleistensymbol ändern

Hallo,

lässt sich das Taskleistensymbol eines Programms im laufenden Betrieb, bspw als Reaktion auf ein Ereignis, ändern?
Wenn ja, wie und wo?

Neugierige Grüße,
Andreas

(VB 2010 Express, dotnet 4, Win7)

Content-ID: 228948

Url: https://administrator.de/forum/taskleistensymbol-aendern-228948.html

Ausgedruckt am: 08.04.2025 um 10:04 Uhr

colinardo
Lösung colinardo 06.02.2014, aktualisiert am 07.02.2014 um 08:52:30 Uhr
Goto Top
Hall Andreas,
von deinem eigens programmierten Programm oder von einem anderen Prozess ? Das erstere ist problemlos möglich.
Dazu fügst du z.B. das Icon deinen Visual Studio Projekt-Resourcen (Rechtsklick im Solution Explorer auf deine Anwendung > Eigenschaften > Resourcen) hinzu und machst dann im entsprechenden Event oder Prozedur eine Zeile wie diese hier, um das Icon im laufenden Betrieb zu wechseln (VB.Net):
NotifyIcon1.Icon = My.Resources.MyNewIcon
oder das Icon alternativ von einem Pfad laden und dann der jeweiligen Eigenschaft zuweisen:
 Dim ic As New Icon("D:\MyNew.ico")
Grüße Uwe
ahstax
ahstax 06.02.2014 aktualisiert um 16:20:40 Uhr
Goto Top
Hallo Uwe,

Das Icon von einem von mir programmierten Programm soll sich ändern.
Für meine Belange könnten zwei Icons vorgehalten werden, die entsprechend der aktuellen Situation angezeigt werden. Oder das eine hinterlegte Icon wird durch eine Farbe ersetzt. Oderoderoder...

Nur der Vollständigkeit halber: Gemeint ist der Bereich zwischen der Windows-Kachel und der Uhr. (Ist das die Taskleiste...?)

Grüße,
Andreas
colinardo
Lösung colinardo 06.02.2014, aktualisiert am 07.02.2014 um 08:52:29 Uhr
Goto Top
Zitat von @ahstax:
Nur der Vollständigkeit halber: Gemeint ist der Bereich zwischen der Windows-Kachel und der Uhr. (Ist das die
Taskleiste...?)
hab ich verstanden. Das Steuerelement NotifyIcon setzt ein Icon in den Traybereich von Windows. Dessen Eigenschaft Icon kannst du problemlos in deinen Events ändern...
ahstax
ahstax 06.02.2014 um 16:27:07 Uhr
Goto Top
Bitte entschuldige die Nachfrage...
Ich bin davon ausgegangen, dass das NotyfyIcon im Infobereich der Taskleiste angezeigt wird. Bewirkt dessen Änderung auch die Änderung auch die Änderung des Taskleistensymbols?
colinardo
Lösung colinardo 06.02.2014, aktualisiert am 07.02.2014 um 08:52:27 Uhr
Goto Top
Zitat von @ahstax:
Ich bin davon ausgegangen, dass das NotyfyIcon im Infobereich der Taskleiste angezeigt wird. Bewirkt dessen Änderung auch die
Änderung auch die Änderung des Taskleistensymbols?
nein, dazu musst du das Icon der Haupt-Form ändern ...
Me.Icon = ......
ahstax
ahstax 07.02.2014 um 08:52:24 Uhr
Goto Top
Perfekt, wie immer!

Herzlichen Dank!
ahstax
ahstax 07.02.2014 um 13:58:34 Uhr
Goto Top
Interessanter Effekt...
Im Debugmodus funktioniert das Ändern des Icons.
In dem compilierten Programm (\bin\release\) auch.
Kopiere ich den kompletten Inhalt aus \bin\release\ an einen anderen Speicherort, funktioniert es nicht mehr.

Die zu verwendenden Icons sind in dem Ordner \bin\release\, der Pfad wird erkannt durch
System.Windows.Forms.Application.StartupPath & "\Icon.ico"

Könnte das an meinem Code liegen? Oder an Windows?
colinardo
Lösung colinardo 07.02.2014 aktualisiert um 14:24:48 Uhr
Goto Top
muss an deinem Code liegen... hier geht das einwandfrei. Benutze mal anstatt System.Windows.Forms.Application.StartupPath das hier:
My.Application.Info.DirectoryPath & "\Icon.ico"
oder
Application.StartupPath & "\Icon.ico"
ahstax
ahstax 07.02.2014 um 14:18:12 Uhr
Goto Top
Gleicher Effekt...
Das NotifyIcon wird geändert... Das TaskleistenIcon nicht. Das Icon, das am Form angezeigt wird hingegen schon. Könnte es am Windows liegen?

Hier mal ein Code-Ausschnitt:

    Public strIconOK As String = My.Application.Info.DirectoryPath & "\PingPong1.ico"  
    Public icoIconOK As Icon = New Icon(strIconOK)

        Dim vPing As New Ping
        Dim vPingReply As PingReply = vPing.Send(txtBoxIP2Ping2.Text)

        System.Windows.Forms.Application.DoEvents()

        If vPingReply.Status.ToString = "Success" Then  
            vPing.Dispose()
            pnlStatus.BackColor = Color.YellowGreen

            Me.Icon = icoIconOK
            NotifyIcon1.Icon = icoIconOK

            Me.Refresh()
            Threading.Thread.Sleep(250)
            intSuccess += 1
            bolSuccess = True
         Else
            vPing.Dispose()
            pnlStatus.BackColor = Color.DarkRed
            intFail += 1
        End If

Noch eine ergänzende Frage:
Während der Ping läuft (fällt vor allem auf, wenn es ein Timeout gibt), reagiert die Form vorübergehend auf keine Benutzereingaben mehr. Programmierfehler?
colinardo
Lösung colinardo 07.02.2014 aktualisiert um 14:56:54 Uhr
Goto Top
Zitat von @ahstax:
Noch eine ergänzende Frage:
Während der Ping läuft (fällt vor allem auf, wenn es ein Timeout gibt), reagiert die Form vorübergehend auf
keine Benutzereingaben mehr. Programmierfehler?
jetzt ist es mir klar, das hängt beides zusammen! Nutze für so etwas einen BackgroundWorker oder arbeite hier mit Threads, und vergesse DoEvents !!!! Ganz klarer Programmierfehler ...
ahstax
ahstax 07.02.2014 aktualisiert um 14:56:45 Uhr
Goto Top
OK, deutliche Worte...!
(Ist mir aber lieber als ein "komisches, nicht erklärbares" Problem)
Ran ans Werk... face-wink

Tagt das was?
colinardo
Lösung colinardo 07.02.2014 aktualisiert um 15:09:35 Uhr
Goto Top
Zitat von @ahstax:
Tagt [https://www.vb-paradise.de/allgemeines/tipps-tricks-und-tutorials/windows-forms/61500-multithreading-mit-backgroundworker/
das] was?
für den Anfang ja, wenn du das verstanden hast schaust du dir mal Delegates und Update UI with Delegates an
colinardo
Lösung colinardo 07.02.2014, aktualisiert am 10.02.2014 um 08:59:54 Uhr
Goto Top
Hab dir mal ein Beispiel-Projekt dazu gemacht damit du schneller nachvollziehen kannst, wie das mit Threads und UI-Delegate so funktioniert: face-wink
PingTestThreading (VS2010 Project)

Viel Erfolg
Grüße Uwe
ahstax
ahstax 10.02.2014 um 08:59:49 Uhr
Goto Top
Herzlichen Dank!!!! face-wink

Den Backgroundworker hab ich in Gang gebracht. Das Taskleisten-Icon verweigert weiter die Zusammenarbeit. Dein Beispiel werde ich mir dazu gleich ansehen!