Icons in der Taskbar

Wolfgang Kluge
wolfgang@vbwelt.de

Seit es Windows95 gibt, gibt es Programme, die Ihr Icon in die Notification-Area stellen und dort für aufsehen sorgen. Am Anfang war es auch ein eher selten genutzer Platz. Mittlerweile macht sich jeder mal dran.
Und um in VB ein Programm zu schreiben, daß dies tut braucht es mal wieder, wie sollte es auch anders sein, eine API - Funktion.
Man behilft sich bei dieser Funktion mit einer PictureBox, da sonst eine Auswertung der MouseEreignisse nicht (oder sehr schwer wird).

 Deklaration:
Private Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long
Private Type NOTIFYICONDATA
  cbSize As Long
  hwnd As Long
  uID As Long
  uFlags As Long
  uCallbackMessage As Long
  hIcon As Long
  szTip As String * 64
End Type
Private Const NIM_ADD = &H0
Private Const NIM_DELETE = &H2
Private Const NIM_MODIFY = &H1
Private Const NIF_ICON = &H2
Private Const NIF_MESSAGE = &H1
Private Const NIF_TIP = &H4
Private Const WM_MOUSEMOVE = &H200

Dim NoIc As NOTIFYICONDATA



' Zum setzen eines Icons..

Dim ret As Long
With NoIc
  .cbSize = Len(NoIc)
  .hIcon = Me.Icon
  .hwnd = Me.hwnd
  .szTip = "Der Tooltip schlechthin" & Chr(0)
  .uCallbackMessage = WM_MOUSEMOVE
  .uFlags = NIF_MESSAGE Or NIF_ICON Or NIF_TIP
  .uID = 0

  ' Um eine eindeutige ID zu bekommen(uID),
  ' muß folgende Schleife solange ausgeführt werden
  ' bis der Rückgabewert <> 0 ist
  Do While ret = 0
    .uID = .uID + 1
    ret = Shell_NotifyIcon(NIM_ADD, NoIc)
  Loop

End With



' Zum ändern eines Icons..(Tooltip-Text oder Icon)

NoIc.szTip = "Jetzt wird alles anders..." & Chr(0)
Shell_NotifyIcon NIM_MODIFY, NoIc



' Zum löschen eines Icons..sollte beim beenden des Programms nicht vergessen werden.

Shell_NotifyIcon NIM_DELETE, NoIc


Um das ganze nicht nur schön aussehen zu lassen, sondern auch sinnvoll einzusetzen wird das ganze jetzt noch im MouseOver-Ereigniss der PictureBox ausgewertet.

' Im Parameter X ist die Information erhalten,
' die vom NotifyIcon bei Mouse - Ereignissen zurückkommt
Dim Mess As Long
Mess = (X And &HFF) * &H100
Select Case Mess
  Case 0 ' Mausbewegung
  Case &HC00 ' MouseDown links
  Case &H1800 ' MouseUp links
  Case &H2400 ' DblClick links
  Case &H3000 ' MouseDown rechts
  Case &H3C00 ' MouseUp rechts
  Case &H4800 ' DblClick rechts
End Select