Shell_NotifyIcon
Una manera f�cil de colocar un icono en la ventana de notificación de Windows

Fecha: 22 de febrero de 2004 (23/Feb/2004)
Autor: Pitillos [email protected]


Explicaci�n Shell_NotifyIcon
Yo personalmente normalmente declaro todas las constantes y la funci�n en un modulo como publico para poder modificar el icono desde cualquier otro form pero para el ejemplo decid� ponerlo todo de corrido.

A continuaci�n sigue c�digo en Visual Basic:

Option Explicit
Private Type NOTIFYICONDATA ' declaracion del tipo de datos para notificar el icono
        cbSize As Long
        hwnd As Long
        uID As Long
        uFlags As Long
        uCallbackMessage As Long
        hIcon As Long
        szTip As String * 64
End Type
'constantes relacionas con el raton
Private Const WM_RBUTTONUP = &H205
Private Const WM_LBUTTONDBLCLK = &H203
Private Const WM_MOUSEMOVE = &H200
'constantes de lo que queremos que muestre el icono
Private Const NIF_ICON = &H2 ' queremos que muestre un icono
Private Const NIF_MESSAGE = &H1 ' queremos que nos envie un mensaje
Private Const NIF_TIP = &H4 ' queremos que muestre un texto al posicionarnos encima
'constantes para a�adir, borrar o modificar el icono
Private Const NIM_ADD = &H0 ' a�adirlo a la barra de tareas
Private Const NIM_DELETE = &H2 ' borrarlo de la barra de tareas
Private Const NIM_MODIFY = &H1 ' modificarlo
' declaracion de la funcion
Private Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long

Dim icono As NOTIFYICONDATA
Private Sub Form_Load()
    Me.Hide ' Oculto el Form
    icono.cbSize = Len(icono) ' Tama�o de la variable
    icono.hIcon = Me.Icon ' icono mostrado en la barra
    icono.hwnd = Me.hwnd ' manipulador del proceso
    icono.uCallbackMessage = WM_MOUSEMOVE ' mensaje que envia al pasar el mouse por encima
    icono.szTip = "Icono en la barra de tareas" & Chr$(0) ' mensaje que muestra al posicionar el raton encima el Chr$(0) es por los strings de C++
    icono.uFlags = NIF_ICON Or NIF_MESSAGE Or NIF_TIP ' los eventos que va a realizar
    icono.uID = 1& ' un identificador del icono
    Shell_NotifyIcon NIM_ADD, icono ' llamamos a la funcion para a�adirlo
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    Shell_NotifyIcon NIM_DELETE, icono ' al cerrar destruimos el icono
End Sub
Private Sub form_MouseMove(Button As Integer, Shift As Integer, x As Single, Y As Single)
Static rec As Boolean, MSG As Long
    MSG = x / Screen.TwipsPerPixelX ' forma facil de obtener el lwparam para usarlo en vb (es que soy programador de C)
    If rec = False Then ' use la variable rec para saber si ya se esta mostrando el menu y que no aparezca dos veces
        rec = True ' activo la variable para saber que ya voy a mostrar el menu
        Select Case MSG
            Case WM_LBUTTONDBLCLK: ' doble click con el boton izquierdo del raton
                Frm_principal.Show ' mostramos el form principal
                'frm_Principal.Show
            Case WM_RBUTTONUP:
                Me.PopupMenu menu ' click con el boton secundario, mostramos el menu correspondiente
        End Select
        rec = False
    End If
End Sub
Private Sub mnu_Click(Index As Integer)
Select Case Index
    Case 0
        Frm_principal.Show
    Case 1
        Unload Frm_principal
    Case 3
        Unload Frm_principal
        Unload Me
End Select
End Sub

Bueno eso es todo, lo he comentado al m�ximo para que no haya pegas.

 

ir al índice

El zip con el c�digo de ejemplo: pitillos_shellnotifyicon.zip 2.42 KB