Estás trabajando sin conexión, espera a que vuelva la conexión a Internet

Cómo usar la bandeja del sistema desde Visual Basic

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:
    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:
    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
Taskbar
Propiedades

Id. de artículo: 176085 - Última revisión: 12/27/2007 14:57:00 - Revisión: 2.4

  • 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
  • kbhowto kbbug KB176085
Comentarios