Fenster in der Taskleiste blinken lassen

    • Allgemein

    Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Knato.

      Fenster in der Taskleiste blinken lassen

      Vor kurzem wurde hier im Forum gefragt, wie man denn die Taskleiste in VB2005 blinken lassen kann. Die folgenden 2 Codeschnippsel sind für VB6 bzw. VB.net/VB200x. Der 2. Parameter (FlashMode) gibt an, wie das Fenster blinken soll. Wenn hier die Konstante FLASHW_ALL angegeben wird, blinkt die Titelleiste des Fensters und der Eintrag in der Taskleiste, bei FLASHW_TRAY nur die Taskleiste, bei FLASHW_CAPTION nur die Titelleiste. Wenn FLASHW_STOP übergeben wird, hören Taskleiste und Titelleiste sofort auf zu blinken. Das kann z.B. verwendet werden, wenn das Fenster beim Fokus aufhören soll zu blinken.

      VB6:
      Folgenden Code in ein Modul packen

      VB.NET-Quellcode

      1. Option Explicit
      2. 'API-Deklaration
      3. Private Declare Function FlashWindowEx Lib "user32" _
      4. (ByRef FWI As FLASHWINFO) As Boolean
      5. 'Konstanten für FlashMode
      6. Public Const FLASHW_STOP = 0 'Blinkvorgang beenden und zum Originalzustand zurückkehren
      7. Public Const FLASHW_CAPTION = &H1 'Die Titelleiste des Fensters blinken lassen
      8. Public Const FLASHW_TRAY = &H2 'Den Taskbar-Button des Fensters blinken lassen
      9. Public Const FLASHW_ALL = (FLASHW_CAPTION Or FLASHW_TRAY) 'FLASHW_CAPTION und FLASHW_TRAY werden kombiniert
      10. Private Type FLASHWINFO
      11. cbSize As Long
      12. hwnd As Long
      13. dwFlags As Long
      14. uCount As Long
      15. dwTimeout As Long
      16. End Type
      17. ' Mit dieser Funktion kann man ein Fenster blinken lassen um z.B. den Benutzer auf neue aktivität im Programm aufmerksam zu machen.
      18. ' Handle: Gibt den Fensterhandle an
      19. ' FlashMode: Gibt den Blink-Modus an (Taskleiste, Titelleiste oder beide)
      20. ' FlashCount: Gibt die Anzahl der Blink-Wiederholungen an
      21. ' Speed: Gibt die Blinkgeschwindigkeit in Millisekunden an. Wenn der Wert 0 ist wird die Standardgeschwindigkeit genommen
      22. Public Sub FlashWindow(ByVal Handle As Long, ByVal FlashMode As Integer, ByVal FlashCount As Integer, Optional ByVal Speed As Integer = 0)
      23. Dim FlashInfo As FLASHWINFO
      24. FlashInfo.cbSize = Len(FlashInfo)
      25. FlashInfo.dwFlags = FlashMode
      26. FlashInfo.dwTimeout = Speed
      27. FlashInfo.hwnd = Handle
      28. FlashInfo.uCount = FlashCount
      29. FlashWindowEx FlashInfo
      30. End Sub


      Um die Taskleiste bzw. die Titelleiste jetzt blinken zu lassen, genügt z.B. folgender Aufruf:

      VB.NET-Quellcode

      1. FlashWindow Me.hwnd, FLASHW_ALL, 5, 1000

      Im Anhang findet sich ein Beispiel für VB6. Das Archiv lässt sich mit 7zip und WinRAR entpacken.


      VB.net/VB2005:
      Folgenden Code in ein Modul packen

      VB.NET-Quellcode

      1. Private Declare Auto Function FlashWindowEx Lib "user32" _
      2. (ByRef FWI As FLASHWINFO) As Boolean
      3. ''' <summary>Den Blinkvorgang beenden und zum Originalzustand zurücksetzen</summary>
      4. Public Const FLASHW_STOP = 0
      5. ''' <summary>Die Titelleiste des Fensters blinken lassen</summary>
      6. Public Const FLASHW_CAPTION = &H1
      7. ''' <summary>Den Taskbar-Button des Fensters blinken lassen</summary>
      8. Public Const FLASHW_TRAY = &H2
      9. ''' <summary>FLASHW_CAPTION und FLASHW_TRAY werden kombiniert</summary>
      10. Public Const FLASHW_ALL = (FLASHW_CAPTION Or FLASHW_TRAY)
      11. Private Structure FLASHWINFO
      12. Dim cbSize As UInt16
      13. Dim hwnd As IntPtr
      14. Dim dwFlags As UInt32
      15. Dim uCount As UInt16
      16. Dim dwTimeout As UInt32
      17. End Structure
      18. ''' <summary>
      19. ''' Mit dieser Funktion kann man ein Fenster blinken lassen um z.B. den Benutzer auf neue aktivität im Programm aufmerksam zu machen.
      20. ''' </summary>
      21. ''' <param name="Handle">Gibt den Fensterhandle an</param>
      22. ''' <param name="FlashMode">Gibt den Blink-Modus an (Taskleiste, Titelleiste oder beide)</param>
      23. ''' <param name="FlashCount">Gibt die Anzahl der Blink-Wiederholungen an</param>
      24. ''' <param name="Speed">Gibt die Blinkgeschwindigkeit in Millisekunden an. Wenn der Wert 0 ist wird die Standardgeschwindigkeit genommen</param>
      25. Public Sub FlashWindow(ByVal Handle As Integer, ByVal FlashMode As Integer, ByVal FlashCount As Integer, Optional ByVal Speed As Integer = 0)
      26. Dim FlashInfo As New FLASHWINFO
      27. FlashInfo.cbSize = System.Runtime.InteropServices.Marshal.SizeOf(FlashInfo)
      28. FlashInfo.dwFlags = FlashMode
      29. FlashInfo.dwTimeout = Speed
      30. FlashInfo.hwnd = Handle
      31. FlashInfo.uCount = FlashCount
      32. FlashWindowEx(FlashInfo)
      33. End Sub


      Hier sieht der Aufruf so aus:

      VB.NET-Quellcode

      1. FlashWindow(Me.Handle, FLASHW_ALL, 5, 1000)



      Keywords: Visual Basic, VB6, VB.net, VB2005, Taskleiste blinken lassen, Titelleiste blinken lassen, FlashWindow, FlashWindowEx, FLASHWINFO, FLASHW_STOP, FLASHW_CAPTION, FLASHW_TRAY, FLASHW_ALL
      Dateien

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Mad Andy“ ()

      muss man das Blinken noch iwie beenden oder wird das beim FormAufruf automatisch beendet ?
      Ui, das ist schon wieder lange her :D

      Jo, mit FLASHW_STOP sollte es aufhören. Der Aufruf ändert quasi die Einstellung mit sofortiger Wirkung. Bzw. wer lesen kann ist klar im Vorteil ;)
      Wenn FLASHW_STOP übergeben wird, hören Taskleiste und Titelleiste sofort auf zu blinken. Das kann z.B. verwendet werden, wenn das Fenster beim Fokus aufhören soll zu blinken.



      mfG
      Andy
      Dann musst Du Dir Deinen Handle über Process() besorgen.
      Vllt noch ein wenig nach .NET umschreiben, solch Handle ist ein IntPtr.
      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!