EJECUCIÓN DE UN PROGRAMA MINIMIZADO EN EL SYS TRAY
Formulario (que es el programa en si) y un menú
Option Explicit
Const MAX_TOOLTIP As Integer = 64
Const NIF_ICON = &H2
Const NIF_MESSAGE = &H1
Const NIF_TIP = &H4
Const NIM_ADD = &H0
Const NIM_DELETE = &H2
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
Private Type NOTIFYICONDATA
cbSize As Long
hwnd As Long
uID As Long
uFlags As Long
uCallbackMessage
As Long
hIcon As Long
szTip As String * MAX_TOOLTIP
End Type
Private nfIconData
As NOTIFYICONDATA
Private Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As
NOTIFYICONDATA) As Long
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
'***Constantes de Ventana***
Private Const WIN_NORMAL = 1
'Abrir Normal
Private Const WIN_MAX = 3 'Abrir Maximizada
Private Const WIN_MIN = 2 'Abrir Minimizada
Private Declare Function apiShellExecute Lib "shell32.dll" _
Alias "ShellExecuteA"
_
(ByVal hwnd As Long, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long) _
As Long
'***Codigo de Errores***
Private Const ERROR_SUCCESS = 32&
Private Const ERROR_NO_ASSOC =
31&
Private Const ERROR_OUT_OF_MEM
= 0&
Private Const
ERROR_FILE_NOT_FOUND = 2&
Private Const
ERROR_PATH_NOT_FOUND = 3&
Private Const ERROR_BAD_FORMAT
= 11&
Private Sub Form_Load()
AddIcon
Me.Hide
End Sub
Private Sub AddIcon()
'
' Añade el icono de la aplicacion
al Sys Tray.
'
' Parm 1 = Dispone
a la ventana para recibir mensaje
' lo
asocia con un icono en la barra de tareas.
' Parm 2 = Icono a
mostrar.
' Parm 3 = Dispone
el icono a mostrar.
' Parm 4 = Texto
que aparece cuando el cursor se mueve por encima del icono.
'
With nfIconData
.hwnd = Me.hwnd
.uID = Me.Icon
.uFlags = NIF_ICON Or NIF_MESSAGE Or NIF_TIP
.uCallbackMessage =
WM_MOUSEMOVE
.hIcon = Me.Icon.Handle
.szTip =
"Proyecto Minimizar SysTray" & vbNullChar
.cbSize = Len(nfIconData)
End With
Call Shell_NotifyIcon(NIM_ADD, nfIconData)
End Sub
Private Sub cmdQuit_Click()
Unload Me
End Sub
Private Sub Form_MouseMove(Button
As Integer, Shift As Integer, X As Single, Y As Single)
Dim lMsg As
Single
'
' Determina el evento asociado al System Tray.
' Clickamos el boton izquierdo para desplegar el Mensaje.
' El botón derecho crea una instancia a un
objeto
' El código ActiveX
invoca un metodo para mostrar un mensaje.
'
lMsg = X / Screen.TwipsPerPixelX
Select Case lMsg
Case WM_LBUTTONUP
mnu_options.Visible
= False
Case WM_RBUTTONUP
Case WM_MOUSEMOVE
Case WM_LBUTTONDOWN
mnu_options.Visible
= False
Case WM_LBUTTONDBLCLK
Case WM_RBUTTONDOWN
mnu_options.Visible
= True
SetForegroundWindow
Me.hwnd
PopupMenu mnu_options, , , , mnu_addcomment 'will be shown in bold
Case WM_RBUTTONDBLCLK
'whichever
exe you may want to call
Case Else
'mnu_options.Visible
= False
End Select
End Sub
Private Sub mnu_opcion1_Click()
WindowState = vbNormal
Visible = True
End Sub
Private Sub mnu_opcion2_Click()
Me.Hide
End Sub
Private Sub mnu_opcion4_Click()
Unload Me
End Sub
'Dejamos que el menu
aparezca en sobre el icono
'En el menú deberia haber
alguna opción para salir de la aplicación
'---------------------------
'Crea un Tray del programa,
añade el icono para poder ejecutar y restaurar la aplicación desde la barra del
Tray
'El Tray se ejecuta automaticamente al iniciar la aplicación
'
'