Icono en el System Tray
Gracias a Joe LeVasseur por enviar este ejemplo de cómo crear un icono en la barra de sistema (junto al reloj de sistema, como el control de volumen). Lo interesante es que no requiere, como otros casos, el uso de un control OCX o librería DLL específica sino que lo logra todo con código.
Primeramente definir el siguiente tipo propio:
Private Type TIPONOTIFICARICONO
cbSize As Long
hwnd As Long
uId As Long
uFlags As Long
ucallbackMessage As Long
hIcon As Long
szTip As String * 64
End Type
Luego las siguientes constantes:
Private Const NIM_ADD = &H0
Private Const NIM_MODIFY = &H1
Private Const NIM_DELETE = &H2
Private Const WM_MOUSEMOVE = &H200
Private Const NIF_MESSAGE = &H1
Private Const NIF_ICON = &H2
Private Const NIF_TIP = &H4
Private Const WM_LBUTTONDBLCLK = &H203
Private Const WM_LBUTTONDOWN = &H201
Private Const WM_LBUTTONUP = &H202
Private Const WM_RBUTTONDBLCLK = &H206
Private Const WM_RBUTTONDOWN = &H204
Private Const WM_RBUTTONUP = &H205
Luego, una línea de declaración que deberá agregar en cualquier módulo:
Private Declare Function Shell_NotifyIcon Lib "shell32"_Alias "Shell_NotifyIconA" (ByVal dwMessage As Long,_pnid As TIPONOTIFICARICONO) As Boolean
Otra línea mas con:
Private Declare Function WinExec& Lib "kernel32" _ (ByVal lpCmdLine As String, ByVal nCmdShow As Long)
Y, por último:
Dim t As TIPONOTIFICARICONO
Private Sub Form_Load()
If App.PrevInstance Then
mnuAcerca_Click
Unload Me
End
End If
t.cbSize = Len(t)
t.hwnd = picGancho.hwnd
t.uId = 1&
t.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
t.ucallbackMessage = WM_MOUSEMOVE
t.hIcon = Me.Icon
t.szTip = "Ejemplo de barra de tareas..." & Chr$(0) ' Es un string de "C" ( \0 )
Shell_NotifyIcon NIM_ADD, t
Me.Hide
App.TaskVisible = False
End Sub