Cómo usar la bandeja del sistema desde Visual Basic

Seleccione idioma Seleccione idioma
Id. de artículo: 176085 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Resumen

En este artículo se muestra cómo aprovechar al máximo la bandeja del sistema de Windows o el área de notificación de la barra de tareas utilizando Visual Basic. En el ejemplo se coloca el icono que se prefiera en el área de notificación de la barra de tareas, que mostrará la información sobre herramientas que elija cuando el mouse pase sobre él, restaurará la aplicación al hacer clic y mostrará un menú emergente al hacer clic con el botón secundario del mouse. Todo esto es posible debido a la capacidad de Visual Basic de administrar directamente las devoluciones de llamada, aprovechando por tanto al máximo la función Shell_NotifyIcon que Shell32.dll exporta.

Más información

El ejemplo siguiente se puede agregar a cualquier proyecto de Visual Basic que tenga al menos un formulario y un módulo estándar.

Ejemplo paso a paso:

  1. Agregue el código siguiente a la sección de declaraciones de un módulo estándar de su proyecto:
          'user defined type required by Shell_NotifyIcon API call
          Public Type NOTIFYICONDATA
           cbSize As Long
           hwnd As Long
           uId As Long
           uFlags As Long
           uCallBackMessage As Long
           hIcon As Long
           szTip As String * 64
          End Type
    
          'constants required by Shell_NotifyIcon API call:
          Public Const NIM_ADD = &H0
          Public Const NIM_MODIFY = &H1
          Public Const NIM_DELETE = &H2
          Public Const NIF_MESSAGE = &H1
          Public Const NIF_ICON = &H2
          Public Const NIF_TIP = &H4
          Public Const WM_MOUSEMOVE = &H200
          Public Const WM_LBUTTONDOWN = &H201     'Button down
          Public Const WM_LBUTTONUP = &H202       'Button up
          Public Const WM_LBUTTONDBLCLK = &H203   'Double-click
          Public Const WM_RBUTTONDOWN = &H204     'Button down
          Public Const WM_RBUTTONUP = &H205       'Button up
          Public Const WM_RBUTTONDBLCLK = &H206   'Double-click
    
          Public Declare Function SetForegroundWindow Lib "user32" _
          (ByVal hwnd As Long) As Long
          Public Declare Function Shell_NotifyIcon Lib "shell32" _
          Alias "Shell_NotifyIconA" _
          (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean
    
          Public nid As NOTIFYICONDATA
    					
  2. Agregue el código siguiente a cualquier formulario del proyecto que desee que responda al icono de la Bandeja del sistema o al icono de Notificación de la aplicación:
          Private Sub Form_Load()
           'the form must be fully visible before calling Shell_NotifyIcon
           Me.Show
           Me.Refresh
           With nid
            .cbSize = Len(nid)
            .hwnd = Me.hwnd
            .uId = vbNull
            .uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
            .uCallBackMessage = WM_MOUSEMOVE
            .hIcon = Me.Icon
            .szTip = "Your ToolTip" & vbNullChar
           End With
           Shell_NotifyIcon NIM_ADD, nid
          End Sub
    
          Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
          'this procedure receives the callbacks from the System Tray icon.
          Dim Result As Long
          Dim msg As Long
           'the value of X will vary depending upon the scalemode setting
           If Me.ScaleMode = vbPixels Then
            msg = X
           Else
            msg = X / Screen.TwipsPerPixelX
           End If
           Select Case msg
            Case WM_LBUTTONUP        '514 restore form window
             Me.WindowState = vbNormal
             Result = SetForegroundWindow(Me.hwnd)
             Me.Show
            Case WM_LBUTTONDBLCLK    '515 restore form window
             Me.WindowState = vbNormal
             Result = SetForegroundWindow(Me.hwnd)
             Me.Show
            Case WM_RBUTTONUP        '517 display popup menu
             Result = SetForegroundWindow(Me.hwnd)
             Me.PopupMenu Me.mPopupSys
           End Select
          End Sub
    
          Private Sub Form_Resize()
           'this is necessary to assure that the minimized window is hidden
           If Me.WindowState = vbMinimized Then Me.Hide
          End Sub
    
          Private Sub Form_Unload(Cancel As Integer)
           'this removes the icon from the system tray
           Shell_NotifyIcon NIM_DELETE, nid
          End Sub
    
          Private Sub mPopExit_Click()
           'called when user clicks the popup menu Exit command
           Unload Me
          End Sub
    
          Private Sub mPopRestore_Click()
           'called when the user clicks the popup menu Restore command
           Dim Result As Long
           Me.WindowState = vbNormal
           Result = SetForegroundWindow(Me.hwnd)
           Me.Show
          End Sub
    					
  3. Configure las propiedades siguientes en el mismo formulario al que agregó el código anterior:
    Contraer esta tablaAmpliar esta tabla
    PropiedadValor requerido del ejemplo del área de notificación de la barra de tareas
    Icon= El icono que desee que aparezca en la bandeja del sistema.
    Minbutton= True
    ShownInTaskbar= False
  4. Agregue los siguientes elementos de menú al mismo formulario utilizando el Editor de menús:
    Contraer esta tablaAmpliar esta tabla
    CaptionNameEnabledVisiblePosition
    &SysTraymPopupSysTrueFalseMain Level
    &RestoremPopRestoreTrueTrueInset one
    &ExitmPopExitTrueTrueInset one
Puede agregar más elementos de menú según sea necesario.

Flexibilidad del área de notificación de la barra de tareas

Puede modificar la información sobre herramientas que aparece sobre el icono de Notificación cambiando la línea siguiente del procedimiento Form_Load:
   .szTip = "Your ToolTip" & vbNullChar
				
Reemplace " Your ToolTip" con el texto que desee que aparezca.

Puede modificar el icono que aparece en el área de notificación de la barra de tareas cambiando la línea siguiente del procedimiento Form_Load:
   .hIcon = Me.Icon
				
Reemplace Me.Icon con cualquier icono en el proyecto.

Puede cambiar en cualquier momento cualquiera de los valores del área de notificación de la barra de tareas después de usar la constante NIM_ADD reasignando los valores de la variable nid y utilizando a continuación la variación siguiente de la llamada a Shell_NotifyIcon de la API:
   Shell_NotifyIcon NIM_MODIFY, nid.
				
Sin embargo, si desea que un formulario diferente reciba la devolución de llamada, tendrá que eliminar el icono actual primero usando "Shell_NotifyIcon NIM_Delete, nid", ya que la función NIM_Modify no aceptará un nuevo Hwnd, o tendrá que agregar otro icono a la bandeja del sistema para el nuevo formulario usando "Shell_NotifyIcon NIM_ADD, nid" después de volver a llenar el tipo nid con los nuevos formularios Hwnd. También puede declarar copias independientes del tipo nid para cada formulario que desee que muestre un icono para la bandeja del sistema de Windows y cambiarlas en el evento activo de cada formulario usando la secuencia de NIM_DELETE y NIM_ADD.

Referencias

Para obtener más información acerca de cómo usar la bandeja del sistema o el área de notificación de la barra de tareas de Visual Basic 4.0 o una versión anterior, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
149276 Cómo usar iconos en el área de notificación de la barra de tareas de Windows 95 y Windows 98

Propiedades

Id. de artículo: 176085 - Última revisión: jueves, 27 de diciembre de 2007 - Versión: 2.4
La información de este artículo se refiere a:
  • Microsoft Visual Basic 6.0 Edición de aprendizaje
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 6.0 Edición empresarial
  • Microsoft Visual Basic Control Creation Edition
  • Microsoft Visual Basic 5.0 Learning Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
Palabras clave: 
kbhowto kbbug KB176085

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com