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

 

'

 

'