Hola a todos:
Tengo una enorme pregunta estoy haciendo un pequeño sistema pero necesito que sea visible en la barra de tareas (sysTray creo se llama), hasta ahi todo bien
El problema es que quiero que aparezca un menu contextual al dar clic derecho sobre el icono de notificacion.... alguien podria asesorarme.
De antemano muchas gracias
este es mi codigo:
Option Explicit
'Estructura NOTIFYICONDATA para usar con Shell_NotifyIcon
Private Type NOTIFYICONDATA
cbSize As Long
hWnd As Long
uID As Long
uFlags As Long
uCallbackMessage As Long
hIcon As Long
szTip As String * 128
dwState As Long
dwStateMask As Long
szInfo As String * 256
uTimeout As Long
szInfoTitle As String * 64
dwInfoFlags As Long
End Type
'Variable para la estructura anterior
Private sysTray As NOTIFYICONDATA
'Constantes
Private Const NOTIFYICON_VERSION = 3
Private Const NOTIFYICON_OLDVERSION = 0
Private Const NIM_ADD = &H0
Private Const NIM_MODIFY = &H1
Private Const NIM_DELETE = &H2
Private Const NIM_SETFOCUS = &H3
Private Const NIM_SETVERSION = &H4
Private Const NIF_MESSAGE = &H1
Private Const NIF_ICON = &H2
Private Const NIF_TIP = &H4
Private Const NIF_STATE = &H8
Private Const NIF_INFO = &H10
Private Const NIS_HIDDEN = &H1
Private Const NIS_SHAREDICON = &H2
Private Const NIIF_NONE = &H0
Private Const NIIF_WARNING = &H2
Private Const NIIF_ERROR = &H3
Private Const NIIF_INFO = &H1
Private Const NIIF_GUID = &H4
Private Const WM_MOUSEMOVE = &H200
Private Const WM_LBUTTONDOWN = &H201
Private Const WM_LBUTTONUP = &H202
Private Const WM_LBUTTONDBLCLK = &H203
Private Const WM_RBUTTONDOWN = &H204
Private Const WM_RBUTTONUP = &H205
Private Const WM_RBUTTONDBLCLK = &H206
Private Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" _
(ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean
Private Sub Form_Activate()
Dim msj_txt As String
Dim msj_titulo As String
msj_txt = "Bienvenido a KeepMe. La aplicación está ahora en ejecución"
msj_titulo = "Sistema KeepMe"
With sysTray
.cbSize = Len(sysTray)
.hWnd = Me.Picture1.hWnd
.uID = vbNull
.uFlags = NIF_ICON Or NIF_INFO Or NIF_MESSAGE Or NIF_TIP
.uCallbackMessage = WM_MOUSEMOVE
.hIcon = Me.Picture1.Picture
.szTip = " Acá colocar el toolTip " & vbNullChar
.dwState = 0
.dwStateMask = 0
End With
'Notifica en el systray
Shell_NotifyIcon NIM_ADD, sysTray
With sysTray
.cbSize = Len(sysTray)
.hWnd = Picture1.hWnd
.uID = vbNull
.uFlags = NIF_ICON Or NIF_INFO Or NIF_MESSAGE Or NIF_TIP
.uCallbackMessage = WM_MOUSEMOVE
.hIcon = Me.Picture1
.szTip = "KeepMe Activado" & vbNullChar
.dwState = 0
.dwStateMask = 0
.szInfo = msj_txt & Chr(0)
.szInfoTitle = msj_titulo & Chr(0)
.dwInfoFlags = NIIF_INFO
.uTimeout = 100
End With
'Modifica el ícono con la información
Shell_NotifyIcon NIM_MODIFY, sysTray
End Sub
Private Sub Form_Unload(Cancel As Integer)
Shell_NotifyIcon NIM_DELETE, sysTray
End Sub
Yo siempre uso un modulo que hizo Sancho Mazorca un user de este foro, que está bastante bien, te pego el code, por q no encuentro el enlace:
'*****************************************************************************************************************
'*
'* Autor: Sancho.Mazorka
'* Fecha: 8/03/07
'*
'* Funcion 1: Agrega un icono al SysTray
'* Funcion 2: Crea un ToolTipText o un BalloonToolTipText
'*
'* Mail: rhcp_269@hotmail.com
'* Web: www.aldeamix.com/ocio/harryx (en construccion)
'* NOTA: Cualquier cambio echo en este modulo agregando o arreglandolo aviseme y lo pondre
'* en la web con su nombre, como ayudante.
'* Parametros:
'* + AgregarIcono(Me.hWnd, Me.Icon,"Esto es un ToolTipText")
'* + MostrarGlobo("Titulo del globo", "Texto del globo", "ToolTipText del icono", Informacion)
'* + CambiarIcono(Me.Icon)
'* + QuitarIcono()
'* + TipText("Nuevo ToolTipText")
'* + EventTray
'* Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
'* if EventTray(X) = "LEFTDOWN" then MsgBox "Click derecho apretado"
'* End Sub
'*
'* NOTA MIA --> Para usar las funciones no poner parentesis ej:
'* Private Sub Form_Load()
'* AgregarIcono Me.hWnd, Me.Icon, "Esto es un ToolTipText"
'* End Sub
'*****************************************************************************************************************
' + + + + + | API | + + + + + '
Private Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean
' + + + + + | TIPO | + + + + + '
Private Type NOTIFYICONDATA
cbSize As Long
hWnd As Long
uID As Long
uFlags As Long
uCallbackMessage As Long
hIcon As Long
szTip As String * 128
dwState As Long
dwStateMask As Long
szInfo As String * 256
uTimeout As Long
szInfoTitle As String * 64
dwInfoFlags As Long
End Type
'nf_IconData guarda todos los parametros de NITIFYICONDATA
Dim nf_IconData As NOTIFYICONDATA
' + + + + + | CONSTANTES | + + + + + '
'Version
Const NOTIFYICON_VERSION = 3
Const NOTIFYICON_OLDVERSION = 0
'Acciones para el API
Const NIM_ADD = &H0
Const NIM_MODIFY = &H1
Const NIM_DELETE = &H2
'Informacion
Const NIM_SETFOCUS = &H3
Const NIM_SETVERSION = &H4
'Parametros
Const NIF_MESSAGE = &H1
Const NIF_ICON = &H2
Const NIF_TIP = &H4
Const NIF_STATE = &H8
Const NIF_INFO = &H10
Const NIS_HIDDEN = &H1
Const NIS_SHAREDICON = &H2
'Tipos de iconos
Const NIIF_NONE = &H0
Const NIIF_WARNING = &H2
Const NIIF_ERROR = &H3
Const NIIF_INFO = &H1
Const NIIF_GUID = &H4
'Eventos en el icono
Const WM_MOUSEMOVE = &H200
Const WM_LBUTTONDOWN = &H201
Const WM_LBUTTONUP = &H202
Const WM_LBUTTONDBLCLK = &H203
Const WM_RBUTTONDOWN = &H204
Const WM_RBUTTONUP = &H205
Const WM_RBUTTONDBLCLK = &H206
' + + + + + | ENUMERACIONES | + + + + + '
Public Enum IconType
Ninguno = NIIF_NONE
Advertencia = NIIF_WARNING
Error = NIIF_ERROR
Informacion = NIIF_INFO
IconoEXE = NIIF_GUID
End Enum
' + + + + + | FUNCIONES | + + + + + '
Sub AgregarIcono(UhWnd As Long, Icono As Long, Optional TipText As String)
'Agregamos un icono al Systray
With nf_IconData
.cbSize = Len(nf_IconData) 'Tamaño del nf_IconData
.hWnd = UhWnd 'hWnd del usuario
.uID = vbNull '?
.uFlags = NIF_ICON Or NIF_INFO Or NIF_MESSAGE Or NIF_TIP 'Parametros
.uCallbackMessage = WM_MOUSEMOVE 'Parametros de respuesta al mouse
.hIcon = Icono 'Icono a poner en el SysTray
.szTip = TipText & vbNullChar 'ToolTipText del Icono
.dwState = 0 '?
.dwStateMask = 0 '?
End With
'Agregamos al SysTray
Shell_NotifyIcon NIM_ADD, nf_IconData
End Sub
Sub MostrarGlobo(Titulo As String, Texto As String, TipText As String, Optional Icono As IconType = IconoEXE)
'Establecemos un texto en el globo
With nf_IconData
.cbSize = Len(nf_IconData) 'Tamaño del nf_IconData
.uID = vbNull '?
.uFlags = NIF_ICON Or NIF_INFO Or NIF_MESSAGE Or NIF_TIP 'Parametros
.uCallbackMessage = WM_MOUSEMOVE 'Parametros de respuesta al mouse
.szTip = TipText & vbNullChar 'ToolTipText del globo
.dwState = 0 '?
.dwStateMask = 0 '?
.szInfo = Texto & Chr(0) 'Texto del globo
.szInfoTitle = Titulo & Chr(0) 'Titulo del globo
.dwInfoFlags = Icono 'Selecionamos el tipo globo, de informacion en este caso (NIIF_NONE, NIIF_INFO, NIIF_WARNING, NIIF_ERROR)
.uTimeout = 3000 'Tiempo de espera (millisec.)
End With
'Mostramos el mensaje del globo
Shell_NotifyIcon NIM_MODIFY, nf_IconData
End Sub
Sub CambiarIcono(Icono As Long)
'Establecemos el nuevo icono
nf_IconData.hIcon = Icono
'Establecemos el icono
Shell_NotifyIcon NIM_MODIFY, nf_IconData
End Sub
Sub QuitarIcono()
'Quitamos el icono
Shell_NotifyIcon NIM_DELETE, nf_IconData
End Sub
Public Sub TipText(Mensaje As String)
'Establecemos el nuevo ToolTipText del icono
nf_IconData.szTip = Mensaje & vbNullChar
'Establecemos el nuevo ToolTipText
Shell_NotifyIcon NIM_MODIFY, nf_IconData
End Sub
Function EventTray(mouseX As Single) As String
'Devolvemos el evento echo en el SysTray
Select Case mouseX / Screen.TwipsPerPixelX 'Tomamos las "coordenadas" de lo que hicimos
Case WM_LBUTTONDOWN
EventTray = "LEFTDOWN" 'Devolvemos que se apreto el click izquierdo
Case WM_LBUTTONUP
EventTray = "LEFTUP" 'Devolvemos que se solto el click izquierdo
Case WM_LBUTTONDBLCLK
EventTray = "LEFTDOUBLE" ''Devolvemos que se apreto 2 veces el click izquierdo
Case WM_RBUTTONDOWN
EventTray = "RIGHTDOWN" 'Devolvemos que se apreto el click derecho
Case WM_RBUTTONUP
EventTray = "RIGHTUP" 'Devolvemos que se solto el click derecho
Case WM_RBUTTONDBLCLK
EventTray = "RIGHTDOUBLE" ''Devolvemos que se apreto 2 veces el click derecho
End Select
End Function
Salu2
Vale muchas gracias me a ayudado demasiado
Si queres podes ver esta clase, esta todo encapsulado el code y es IDE safe, creo que tiene todo o casi todos los comandos funciones y eventos disponibles.
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=68948&lngWId=1