vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Fenster13.07.01
Shell_NotifyIcon-Funktion

Diese Funktion legt ein TrayIcon in der Taskleiste an.

Betriebssystem:  Win95, Win98, WinNT 4.0, Win2000, WinMEViews:  15.284 

Deklaration:

Declare Function Shell_NotifyIcon Lib "shell32.dll" _
  Alias "Shell_NotifyIconA" ( _
  ByVal dwMessage As Long, _
  pnid As NOTIFYICONDATA) As Long

Beschreibung:
Diese Funktion legt ein TrayIcon in der Taskleiste an.

Parameter:
dwMessageLegt fest, ob ein TrayIcon angelegt, modifiziert oder gelöscht werden soll (siehe dwMessage-Konstanten)
pnidErwartet eine NOTIFYICONDATA-Struktur

dwMessage Konstanten:

 
' TrayIcon anlegen
Const NIM_ADD = &H0
 
' TrayIcon löschen
Const NIM_DELETE = &H2
 
' TrayIcon ändern
Const NIM_MODIFY = &H1
 
' Win 2000: Focus auf den Tray setzten
Const NIM_SETFOCUS = &H4
 
' Win 2000: siehe Struktur Deklaration
Const NIM_SETVERSION = &H8
 

Rückgabewert:
War der Funktionsaufruf erfolgreich, wird ein Wert ungleich 0 zurückgegeben, andernfalls ist der Rückgabewert 0.


Beispiel:

Private Declare Function Shell_NotifyIcon Lib "shell32.dll" _
  Alias "Shell_NotifyIconA" ( _
  ByVal dwMessage As Long, _
  pnid 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 ' Unter Windows 2000 "* 128"
 
  ' Unter Windows 200 ausserdem noch:
  ' dwState As Long
  ' dwStateMask As Long
  ' szInfo As String * 256 
  ' uTimeoutOrVersion As Long
  ' szInfoTitle As String * 64
  ' dwInfoFlags As Long
End Type
 
' NOTIFYICONDATA uFlags Konstanten
Private Const NIF_ICON = &H2
Private Const NIF_MESSAGE = &H1
Private Const NIF_TIP = &H4
Private Const NIF_STATE = &H8 ' Windows 2000
Private Const NIF_INFO = &H10 ' Windows 2000
 
' NOTIFYICONDATA Win2000 dwState Konstanten
Private Const NIS_HIDDEN = &H1
Private Const NIS_SHAREDICON = &H2
 
' NOTIFYICONDATA Win2000 uTimeoutOrVersion Konstanten
Private Const NOTIFYICON_VERSION = &H1
 
' NOTIFYICONDATA Win2000 dwInfoFlags Konstanten
Private Const NIIF_WARNING = &H30
Private Const NIIF_ERROR = &H10
Private Const NIIF_INFO = &H40
 
' Shell_NotifyIcon dwMessage Konstanten
Private Const NIM_ADD = &H0
Private Const NIM_DELETE = &H2
Private Const NIM_MODIFY = &H1
Private Const NIM_SETFOCUS = &H4 ' Windows 2000
Private Const NIM_SETVERSION = &H8 ' Windows 2000
 
' Einige Fensternachrichten
Private Const WM_LBUTTONDBLCLK = &H203
Private Const WM_LBUTTONDOWN = &H201
Private Const WM_LBUTTONUP = &H202
Private Const WM_MBUTTONDBLCLK = &H209
Private Const WM_MBUTTONDOWN = &H207
Private Const WM_MBUTTONUP = &H208
Private Const WM_RBUTTONDBLCLK = &H206
Private Const WM_RBUTTONDOWN = &H204
Private Const WM_RBUTTONUP = &H205
 
Private Const WM_MOUSEMOVE = &H200
' Damit wir nicht unsere eigene Callback-Funktion schreiben müssen
' nehmen wir doch einfach eine schon vorhandene und missbrauchen
' sie für unseren Zweck. Das TrayIcon sendet in dem Beispiel an unser Programm
' das WM_MOUSEMOVE Ereignis, die Form interpretiert dies
' als einfache Mausbewegung und nimmt aus den Parametern des
' WM_MOUSEMOVE Ereignisses das "eigentliche Ereignis" z.B.
' WM_LBUTTONCLICK. Da die Form aber "denkt", es wären Maus-
' Ereignisse, rechnet sie dieses "eigentliche Ereignis" in die aktuelle
' Maßeinheit z.B. Twips um. Diese müssen wir wieder zurückberechnen, 
' um unser "eigentliches Ereignis" zu erhalten. Die X Koordinate
' des Form_MouseMove Ereignisses entspricht dann sozusagen
' lParam einer Callback Funktion, wParam wird leider nicht in diesem
' Beispiel ausgewertet, wird aber auch nicht benötigt.
' Wir könnten auch das WM_MOVE Ereignis verwenden, der Nachteil aber wäre, 
' dass uns die interne Hauptschleife der Form "dazwischenfunken" würde
' und die Form an eine andere Stelle des Bildschirmes beförden würde.
' Ich habe extra dieses Beispiel gewählt, damit die sonst schwer zu
' verstehenden Callback Funktionen etwas leichter verständlich sind.
' Dieses Beispiel zeigt nicht den eigentlich Umgang mit Callback-Funktionen, 
' man sieht aber, wie leicht sich auch andere Lösungen realisieren lassen.
 
Dim TrayIcon As NOTIFYICONDATA
' Icon in das Tray kopieren
Private Sub Command1_Click ()
  Me.ScaleMode = vbTwips
 
  With TrayIcon
    .cbSize = Len(TrayIcon)
    .hIcon = Me.Icon
    .hWnd = Me.hWnd
    .szTip = "Mein erstes Trayicon" & vbNullChar
    .uCallbackMessage = WM_MOUSEMOVE ' Form bekommt die Ereignisse
    .uFlags = NIF_ICON Or NIF_MESSAGE Or NIF_TIP
    .uID = 0&
  End With
 
  Shell_NotifyIcon NIM_ADD, TrayIcon
 
  MsgBox "Unser TrayIcon ist nun angelegt"
End Sub
' Icon im Tray modifizieren
Private Sub Command2_Click ()
  TrayIcon.szTip = "Der ToolTipText des TrayIcons wurde geändert!" & vbNullChar 
 
  Shell_NotifyIcon NIM_MODIFY, TrayIcon
 
  MsgBox "Das TrayIcon wurde geändert"
End Sub
' TrayIcon-Ereignisse abfangen
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, _
  X As Single, Y As Single) 
 
  Select Case X / Screen.TwipsPerPixelX
    Case WM_LBUTTONUP
      MsgBox "Sie haben mit der linken Maustaste auf das TrayIcon geklickt"
    Case WM_RBUTTONUP
      MsgBox "Sie haben mit der rechten Maustaste auf das TrayIcon geklickt"
  End Select
End Sub
' Icon aus dem SystemTray löschen
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
  Shell_NotifyIcon NIM_DELETE, TrayIcon
End Sub

 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.