Debes utilizar SystrayIcon para poner la aplicación en la barra de sistema
Pon estás declaraciones en el formulario principal (o en un módulo público si lo prefieres)
Código:
'DECLARACIONES DE LA API DE WINDOWS
Private Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
'ESTRUCTURA SYSTRAY
Private Type NOTIFYICONDATA
cbSize As Long 'Tamaño de UDT
hwnd As Long 'Handle de la aplicación
uId As Long 'No usado
uFlags As Long 'Semáforo de acciones
uCallBackMessage As Long 'Intercambio de mensajes
hIcon As Long 'Icono de la barra
szTip As String * 64 'ToolTip de la barra
End Type
'Constantes de la API
Private Const NIM_ADD = &H0 'Nuevo Nid
Private Const NIM_MODIFY = &H1 'Modificar NID
Private Const NIM_DELETE = &H2 'Borrar NID
Private Const NIF_MESSAGE = &H1 'NID Válido
Private Const NIF_ICON = &H2 'Icono NID inválido
Private Const NIF_TIP = &H4 'ToolTip válido
Private Const WM_MOUSEMOVE = &H200 'Nuestro mensaje de retorno
Private Const WM_LBUTTONDOWN = &H201 'Botón izquierdo presionado
Private Const WM_LBUTTONUP = &H202 'Boton izquierdo liberado
Private Const WM_LBUTTONDBLCLK = &H203 'Doble click
Private Const WM_RBUTTONDOWN = &H204 'Botón derecho presionado
Private Const WM_RBUTTONUP = &H205 'Botón derecho liberado
Private Const WM_RBUTTONDBLCLK = &H206 'Doble click (Botón derecho)
Private nid As NOTIFYICONDATA 'UDT Global para las funciones Systray
En el evento Load del formularioprincipal inserta ésto:
Código:
With nid
.cbSize = Len(nid)
.hwnd = Me.hwnd
.uId = vbNull
.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
.uCallBackMessage = WM_MOUSEMOVE
.hIcon = Me.Icon
.szTip = "<Etiqueta de texto que se muestra>" & vbNullChar
End With
Shell_NotifyIcon NIM_ADD, nid
En el evento Unload esto otro (Para retirar el icono de la barra)
Código:
With nid
.cbSize = Len(nid)
.hwnd = Me.hwnd
.uId = vbNull
.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
.uCallBackMessage = WM_MOUSEMOVE
.hIcon = Me.Icon
.szTip = "<Etiqueta de texto que se muestra>"& vbNullChar
End With
Shell_NotifyIcon NIM_DELETE, nid
y este código para detectar cuando el ratón pasa por el icono de la barra.
Código:
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
Dim msg As Long
If (Me.ScaleMode = vbPixels) Then
msg = x
Else
msg = x / Screen.TwipsPerPixelX
End If
'windows 2000, XP
Select Case Button
Case 1, WM_LBUTTONDBLCLK 'Mostrar panel de administración
Me.WindowState = vbNormal
Call SetForegroundWindow(Me.hwnd)
Me.Show
Case 2, WM_RBUTTONUP 'Mostrar menú
Call SetForegroundWindow(Me.hwnd)
Me.PopupMenu Me.<nombredelmenú>
Case WM_LBUTTONUP
End Select
'Windows 95 98
Select Case msg
Case 513 'Mostrar panel de administración
Me.WindowState = vbNormal
Call SetForegroundWindow(Me.hwnd)
Me.Show
Case 516
Call SetForegroundWindow(Me.hwnd)
Me.PopupMenu Me.<nombredelmenú>
Case WM_LBUTTONUP
End Select
End Sub
En el formulario tienes que construir un menú 'no visible' que mostrarás en
Me.PopupMenu Me.<nombredelmenú>, en el que lógicamente tendrás que escribir el nombre que tú le hayas dado a dicho menú.
Espero que estás API te resulten de utilidad.