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-Key: 228948

Url: https://administrator.de/contentid/228948

Printed on: April 25, 2024 at 10:04 o'clock

Member: colinardo
Solution colinardo Feb 06, 2014, updated at Feb 07, 2014 at 07:52:30 (UTC)
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
Member: ahstax
ahstax Feb 06, 2014 updated at 15:20:40 (UTC)
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
Member: colinardo
Solution colinardo Feb 06, 2014, updated at Feb 07, 2014 at 07:52:29 (UTC)
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...
Member: ahstax
ahstax Feb 06, 2014 at 15:27:07 (UTC)
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?
Member: colinardo
Solution colinardo Feb 06, 2014, updated at Feb 07, 2014 at 07:52:27 (UTC)
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 = ......
Member: ahstax
ahstax Feb 07, 2014 at 07:52:24 (UTC)
Goto Top
Perfekt, wie immer!

Herzlichen Dank!
Member: ahstax
ahstax Feb 07, 2014 at 12:58:34 (UTC)
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?
Member: colinardo
Solution colinardo Feb 07, 2014 updated at 13:24:48 (UTC)
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"
Member: ahstax
ahstax Feb 07, 2014 at 13:18:12 (UTC)
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?
Member: colinardo
Solution colinardo Feb 07, 2014 updated at 13:56:54 (UTC)
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 ...
Member: ahstax
ahstax Feb 07, 2014 updated at 13:56:45 (UTC)
Goto Top
OK, deutliche Worte...!
(Ist mir aber lieber als ein "komisches, nicht erklärbares" Problem)
Ran ans Werk... face-wink

Tagt das was?
Member: colinardo
Solution colinardo Feb 07, 2014 updated at 14:09:35 (UTC)
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
Member: colinardo
Solution colinardo Feb 07, 2014, updated at Feb 10, 2014 at 07:59:54 (UTC)
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
Member: ahstax
ahstax Feb 10, 2014 at 07:59:49 (UTC)
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!