Claro, pudes hacerlo con la api shell_notifyicon.
Option Explicit
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 Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long
Private Const NIM_ADD = &H0
Private Const NIM_MODIFY = &H1
Private Const NIM_DELETE = &H2
Private Const NIF_MESSAGE = &H1
Private Const NIF_ICON = &H2
Private Const NIF_TIP = &H4
Public Const WM_MOUSEMOVE As Long = &H200
Public Const WM_LBUTTONDOWN As Long = &H201
Public Const WM_LBUTTONUP As Long = &H202
Public Const WM_LBUTTONDBLCLK As Long = &H203
Public Const WM_RBUTTONDOWN As Long = &H204
Public Const WM_RBUTTONUP As Long = &H205
Public Const WM_RBUTTONDBLCLK As Long = &H206
Private NID As NOTIFYICONDATA
Public Sub Add(ByVal MyForm As Form, Optional ByVal sToolTip As String)
On Error GoTo ErrHandler
With NID
.cbSize = Len(NID)
.hWnd = MyForm.hWnd
.uID = vbNull
.uFlags = NIF_MESSAGE Or NIF_ICON Or NIF_TIP
.uCallbackMessage = WM_MOUSEMOVE
.hIcon = MyForm.Icon
If sToolTip <> vbNullString Then
.szTip = sToolTip & vbNullChar
End If
End With
Call Shell_NotifyIcon(NIM_ADD, NID)
Exit Sub
ErrHandler:
MsgBox "Could not add systray.", vbCritical, "Error"
End Sub
Public Sub Delete()
On Error GoTo ErrHandler
Call Shell_NotifyIcon(NIM_DELETE, NID)
Exit Sub
ErrHandler:
MsgBox "Could not delete systray.", vbCritical, "Error"
End Sub
Public Sub Modify(ByVal MyForm As Form, Optional ByVal sToolTip As String)
On Error GoTo ErrHandler
With NID
.cbSize = Len(NID)
.hWnd = MyForm.hWnd
.uID = vbNull
.uFlags = NIF_MESSAGE Or NIF_ICON Or NIF_TIP
.uCallbackMessage = WM_MOUSEMOVE
.hIcon = MyForm.Icon
If sToolTip <> vbNullString Then
.szTip = sToolTip & vbNullChar
End If
End With
Call Shell_NotifyIcon(NIM_MODIFY, NID)
Exit Sub
ErrHandler:
MsgBox "Could not modify systray.", vbCritical, "Error"
End Sub
He echo otro modulo para cargar iconos 32-bit, se te hace falta pidemelo.
Salu2