Schaltfläche in der Taskleiste blinken lassen
Veröffentlicht am 15.10.2008 von Sebastian Krogolewski
Manchmal ist es nötig, den Benutzer zu zeigen, dass die eigene Anwendung seine Aufmerksamkeit benötigt. Im Normalfall reicht eine Messagebox aus. Diese ist aber ziemlich aufdringlich bzw. wird unter umständen auch ignoriert.
Ein weniger aufdringlicher Weg, die Aufmerksamkeit des Benutzers auf sich zu ziehen, ist das Blinken der Schaltfläche in der Taskleiste (falls vorhanden) oder der Fenstertitelleiste, entweder auf eine begrenzte Anzahl an Blinkvorgängen oder solange bis der Benutzer das Fenster wieder in den Vordergrund holt.
Visual Basic bietet hier keine bereits fertige Funktionalität an. Aber durch Einbinden der Win API kann man das nachholen. Die Win API Funktion FlashWindowEX aus der User32.Dll bietet uns die Möglichkeit, dieses Blinken zu starten oder zu stoppen.
Einbinden der Win API Funktion FlashWindowEx als FlashWindowExAPI aus der User32.Dll:
1 | Private Declare Function FlashWindowExAPI Lib "user32" Alias "FlashWindowEx" (FWInfo As FLASHWINFO) As Long |
FlashWindowEx erwartet 1 Parameter:
FWInfo: Zeiger auf eine FLASHWINFO Struktur.
Rückgabewert:
Der Rückgabewert liefert den Zustand des Fensters, bevor die FlashWindowEx Funktion aufgerufen wurde.
0: Wenn die Fenstertitelleiste als inaktive Titelleiste vor dem Aufruf gezeichnet wurde.
!0: Wenn die Fenstertitelleiste als aktive Titelleiste vor dem Aufruf gezeichnet wurde.
Deklarieren der FLASHWINFO Struktur:
1
2
3
4
56
7
| Private Type FLASHWINFO cbSize As Long 'Strukturgrösse in bytes hwnd As Long 'Fensterhandle dwFlags As Long 'Flags zum Blinkstatus uCount As Long 'Blinkanzahl dwTimeout As Long 'Blinkintervall in Millisekunden End Type |
Beschreibung:
cbSize: größe der Struktur in bytes.
hwnd: Das Handle des Fensters, welches blinken soll.
dwFlags: Blinkstatus, kann aus einen oder mehreren der folgenden Werte bestehen.
Konstante Wert Beschreibung FLASHW_STOP &H0 Stoppt das blinken, versetzt das Fenster in den Urzustand. FLASHW_CAPTION &H1 Lässt nur die Titelleiste des Fensters blinken. FLASHW_TRAY &H2 Lässt nur die Schaltfläche in der Taskleiste blinken. FLASHW_ALL &H3 Lässt die Schaltfläche in der Taskleiste und die Titelleiste des Fensters blinken FLASHW_TIMER &H4 Lässt solange blinken bis für das Fenster das FLASHW_STOP Flag gesetzt wird. FLASHW_TIMERNOFG &HC Blinkt solange bis das Fenster in den Vordergrund geholt wird. uCount: Anzahl der Blinkvorgänge
dwTimeout: der Intervall in Millisekunden, der zwischen den beiden Blinkzuständen vergehen soll, ist der Wert 0 wird der Standard Wert für die Cursor Blink Rate verwendet
Deklarieren der Konstanten, die den Flags entsprechen:
1
2
3
4
56
7
| 'FlashWindowEx Flags Private Const FLASHW_STOP = &H0 'Stoppt das blinken, versetzt das Fenster in den Urzustand Private Const FLASHW_CAPTION = &H1 'Es blinkt nur die Titelleiste des Fensters Private Const FLASHW_TRAY = &H2 'Es blinkt nur die Schaltfläche in der Taskleiste Private Const FLASHW_ALL = FLASHW_CAPTION Or FLASHW_TRAY 'Es blinkt die Schaltfläche in der Taskleiste und die Titelleiste des FenstersPrivate Const FLASHW_TIMER = &H4 'Blinkt solange bis für das Fenster das FLASHW_STOP Flag gesetzt wird Private Const FLASHW_TIMERNOFG = &HC 'Blinkt solange bis das Fenster in den Vordergrund geholt wird |
Deklaration eines Enums, um nicht direkt mit den Konstanten arbeiten zu müssen.
1
2
3
4
56
7
8
| Private Enum enFlashWindowFlag vbFlashWindowStop = FLASHW_STOP vbFlashWindowCaption = FLASHW_CAPTION vbFlashWindowTray = FLASHW_TRAY vbFlashWindowAll = FLASHW_ALL vbFlashWindowTimer = FLASHW_TIMER vbFlashWindowTimerNoForeground = FLASHW_TIMERNOFG End Enum |
1 2 3 4 56 7 8 9 1011 12 13 14 1516 | Private Sub FlashWindowEx(ByVal hwnd As Long, ByVal Flags As enFlashWindowFlag, Optional ByVal Count As Long = 0, _ Optional ByVal Timeout As Long = 0) Dim FWInfo As FLASHWINFO 'FlashWInfo Struktur mit Daten befüllenWith FWInfo .cbSize = 20 .hwnd = hwnd .dwFlags = Flags .uCount = Count .dwTimeout = Timeout End With 'Aufruf der API Funktion FlashWindowExAPI FWInfoEnd Sub |






