Rubrik: System/Windows · Sonstiges | VB-Versionen: VB4, VB5, VB6 | 28.07.03 |
XP-TrayIcon Erstellen einer Windows XP-Blase im SystemTray | ||
Autor: Alexander | Bewertung: | Views: 18.827 |
www.alexosoft.de.vu | System: Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Angenommen Sie wollen dem Benutzer z.B. eine Meldung anzeigen, dass Updates zu Ihrem Programm bereit stehen. Dies soll aber nicht als normale Meldung angedeutet werden, da dies den Benutzer stören könnte.
Wie könne man hier vorgehen?
Man könnte ein Dialog öffnen und nach einiger Zeit wieder schließen...
Man könnte aber auch...
...eine "XP-Blase" im SystemTray anzeigen...
So geht's!
Zuerst fügen wir ein folgenden Code in ein Modul ein:
Option Explicit ' Hier werden alle wichtigen Daten deklariert, ' damit später das Erstellen einer Windows ' XP Blase einfacher ist. Public ToolTip As NOTIFYICONDATA Public Type NOTIFYICONDATA cbSize As Long hwnd As Long uID As Long uFlags As Long uCallbackMessage As Long hIcon As Long szTip As String * 128 dwState As Long dwStateMask As Long szInfo As String * 256 uTimeout As Long szInfoTitle As String * 64 dwInfoFlags As Long End Type Public Const NIM_ADD = &H0 Public Const NIM_MODIFY = &H1 Public Const NIM_DELETE = &H2 Public Const NIM_SETFOCUS = &H3 Public Const NIM_SETVERSION = &H4 Public Const NIF_MESSAGE = &H1 Public Const NIF_ICON = &H2 Public Const NIF_TIP = &H4 Public Const NIF_STATE = &H8 Public Const NIF_INFO = &H10 Public Const NIS_HIDDEN = &H1 Public Const NIS_SHAREDICON = &H2 Public Const NIF_NOICON = 0 Public Const NIF_INFOICON = 1 Public Const NIF_WARNINGICON = 2 Public Const NIF_ERRORICON = 3 Public Const WM_MOUSEMOVE = &H200 Public Const WM_LBUTTONDOWN = &H201 Public Const WM_LBUTTONUP = &H202 Public Const WM_LBUTTONDBLCLK = &H203 Public Const WM_RBUTTONDOWN = &H204 Public Const WM_RBUTTONUP = &H205 Public Const WM_RBUTTONDBLCLK = &H206 Public Declare Function SetForegroundWindow Lib "user32" ( _ ByVal hwnd As Long) As Long Public Declare Function Shell_NotifyIcon Lib "shell32" _ Alias "Shell_NotifyIconA" ( _ ByVal dwMessage As Long, _ pnid As NOTIFYICONDATA) As Boolean Private Declare Function DefWindowProc Lib "user32" _ Alias "DefWindowProcA" ( _ ByVal hwnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ ByVal lParam As Long) As Long
Public Function WindowProc(ByVal hwnd As Long, _ ByVal uMsg As Long, ByVal wParam As Long, _ ByVal lParam As Long) As Long ' Auf bestimmte Ereignisse reagieren Select Case uMsg Case WM_LBUTTONDBLCLK ' Fenster schließen ' Hier können Sie Code hinzufügen, wenn der Benutzer ' auf das Icon in der Taskbar klickt. End Select ' Standard-Prozedur aufrufen und Ergebnis ' zurückgeben WindowProc = DefWindowProc(hwnd, uMsg, wParam, lParam) End Function
Als nächstes fügen wir nur noch die Funktionen zum Erstellen einer Windows XP-Blase hinzu:
Public Function NewBalloon(ByVal Title As String, _ ByVal Text As String, _ ByVal sToolTip As String, _ ByVal Icon As Long, _ Optional ByVal TimeOut As Long, _ Optional TrayIcon As Variant) Shell_NotifyIcon NIM_DELETE, ToolTip With ToolTip .cbSize = Len(ToolTip) .uID = vbNull .uFlags = NIF_ICON Or NIF_INFO Or NIF_MESSAGE Or NIF_TIP .uCallbackMessage = WM_LBUTTONDBLCLK If Not IsMissing(TrayIcon) Then .hIcon = TrayIcon .szTip = sToolTip & vbNullChar .dwState = 0 .dwStateMask = 0 .szInfo = Text & Chr(0) .szInfoTitle = Title & Chr(0) .dwInfoFlags = Icon .uTimeout = TimeOut End With Shell_NotifyIcon NIM_ADD, ToolTip End Function
Und schon können Sie Windows XP Basen erstellen.
Syntax:
NewBalloon(ByVal Title As String, _ ByVal Text As String, _ ByVal sToolTip As String, _ ByVal Icon As Long, _ Optional ByVal TimeOut As Long, _ Optional TrayIcon As Variant)
Um jetzt eine Blase zu Erstellen, müssen Sie nur noch folgende Codezeile eingeben:
Beispiel mit Bild
NewBalloon "Windows-Aktivierung", _ "Noch 1 Tag bis zur Aktivierung.", _ "Windows Aktivierung aufrufen", _ NIF_WARNINGICON, 3, Image1.Picture
Dabei steht
Beispiel ohne Bild
NewBalloon "Windows-Aktivierung", _ "Haha! Reingelegt", _ "Hier der ToolTip", _ NIF_INFOICON, 3
Was zu beachten ist:
Sie können nur eine Blase anzeigen. Wenn Sie die Funktion also 2x hintereinander ausführen, wird nur die letzte Blase angezeigt.