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 SubBueno eso es todo, lo he comentado al m�ximo para que no haya pegas.
El zip con el c�digo de ejemplo: pitillos_shellnotifyicon.zip 2.42 KB