Об этом, по-моему, не писал только ленивый
Полная объява:
Public Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Long
'для dwMessage
Public Const NIM_ADD = &H0
Public Const NIM_MODIFY = &H1
Public Const NIM_DELETE = &H2
Public Type NOTIFYICONDATA
cbSize As Long 'Размер структуры в байтах
hWnd As Long 'Дескриптор окна,к которому относится значок в systray
uID As Long 'Идентификатор, который уникально идентифицирует значок. Это значение позволяет окну иметь множественные значки в systray, позволяя окно сообщать различия между ними.
uFlags As Long 'Комбинация следующих флажков, определяющих, которые из последующих членов структуры содержат полезные данные. Любые компоненты данных, не идентифицированные флажком будут игнорироваться.
uCallbackMessage As Long 'Определенный приложением идентификатор сообщения. Это сообщение посылается окну всякий раз, когда происходит событие,связанное со значком в systray. Прежде всего-это, когда мышь перемещается или происходитщелчок поверх значка или когда окно получает ввод с клавиатуры. Параметр wParam будет определен идентификатором значка, который генерирует сообщение. Параметр lParam "реальный" идентификатор сообщения Windows .
hIcon As Long 'Дескриптор значка
szTip As String * 64 ' Windows 2000: возможно String * 128
'Строка с нулевым символом в конце. Этот текст появляется, когда курсор мыши находится над значком.
End Type
'для uFlags
Public Const NIF_ICON = &H2 'Компонент данных hIcon.
Public Const NIF_MESSAGE = &H1 'Компонент данных uCallbackMessage.
Public Const NIF_TIP = &H4 'Компонент данных szTip .
'для uCallbackMessage
'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 Const WM_MBUTTONDOWN = &H207
'Public Const WM_MBUTTONUP = &H208
'Public Const WM_MBUTTONDBLCLK = &H209
'Public Const WM_SETFOCUS = &H7
'Public Const WM_KEYDOWN = &H100
'Public Const WM_KEYFIRST = &H100
'Public Const WM_KEYLAST = &H108
'Public Const WM_KEYUP = &H101
'===================================================
Как видно из заремапиных констант - перехватывать события с иконкой будем в WM_LBUTTONUP
Далее пишем:
Public Function SetTrayIcon(Mode As Long, hWnd As Long, Icon As Long, Optional strToolTipText As String = "")
'для помещения иконки в трей и генерации события WM_LBUTTONUP
On Error Resume Next
Dim NID As NOTIFYICONDATA
With NID
.cbSize = Len(NID)
.hWnd = hWnd
.uID = &H0
.uFlags = NIF_MESSAGE Or NIF_ICON Or NIF_TIP
.uCallbackMessage = WM_LBUTTONUP
.hIcon = Icon
.szTip = Left(strToolTipText, 63) & Chr(0)
SetTrayIcon = Shell_NotifyIcon(Mode, NID)
End With
End Function
Public Sub DelIcon(frForm As Form)
'удаляет иконку из трея
On Error Resume Next
With frForm
SetTrayIcon NIM_DELETE, .hWnd, 0, ""
End With
End Sub
Public Sub ModIcon(frForm As Form, Optional strToolTipText As String = "")
'заменяет иконку или всплывающую подсказку на новую
On Error Resume Next
With frForm
SetTrayIcon NIM_MODIFY, .hWnd, .Icon, strToolTipText
End With
End Sub
А события с иконкой перехватываем так (событие MouseUp задали константой WM_LBUTTONUP, можно задать другое):
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
'здесь будет работа с иконкой в трее
If Y = 0 Then 'при работе с иконкой у=0
Select Case X '/ Screen.TwipsPerPixelX
Case 512 'MouseMove
Case 513 'LeftButtonDown
Case 514 'LeftButtonUp
Case 515 'LeftButtonDblClick
Case 516 'RightButtonDown
Case 517 'RightButtonUp
Case 518 'RightButtonDblClick
End Select
End If
End Sub