Barra de tareas

La interfaz de Windows incluye una barra de herramientas de escritorio de aplicaciones especial denominada barra de tareas. Puede usar la barra de tareas para tareas como cambiar entre ventanas abiertas e iniciar nuevas aplicaciones.

Nota

Para obtener información sobre los cambios realizados en la barra de tareas a partir de Windows 7, consulta Extensiones de barra de tareas.

 

En este tema se incluyen las siguientes secciones.

Acerca de la barra de tareas

La barra de tareas incluye lo siguiente:

  • Menú Inicio
  • Barra de inicio rápido (solo Windows Vista y versiones anteriores)
  • Botones de la barra de tareas
  • Barras de herramientas (opcional)
  • Área de notificaciones

El menú Inicio contiene comandos que pueden acceder a programas, documentos y configuraciones. Estos comandos incluyen todos los programas, documentos, Panel de control, juegos, ayuda y soporte técnico, apagar y buscar programas y archivos.

El inicio en versiones anteriores de Windows contenía elementos como Buscar y ejecutar, la funcionalidad de la que se incluía en buscar programas y archivos en Windows Vista y versiones posteriores.

La barra inicio rápido, disponible en versiones de Windows anteriores a Windows 7, contiene accesos directos a las aplicaciones. Windows proporciona entradas predeterminadas, como Windows Internet Explorer, y el usuario puede agregar más accesos directos que elija. Los iconos de esta área responden a un solo clic. En Windows 7 y versiones posteriores, esta funcionalidad se incluye en los botones de la barra de tareas.

El Shell coloca un botón en la barra de tareas cada vez que una aplicación crea una ventana noowned( es decir, una ventana que no tiene un elemento primario y que tiene los bits de estilo extendidos adecuados (vea Administrar botones de la barra de tareas, a continuación). Para cambiar a una ventana, el usuario hace clic en su botón de ventana. Esta funcionalidad se ha ampliado considerablemente a partir de Windows 7. Para obtener más información, vea Extensiones de barra de tareas.

Las aplicaciones pueden colocar iconos en el área de notificación para indicar el estado de una operación o para notificar al usuario sobre un evento. Por ejemplo, una aplicación podría colocar un icono de impresora en el área de notificación para mostrar que un trabajo de impresión está en curso. Sin embargo, en Windows 7 y versiones posteriores, se debe proporcionar parte de la información proporcionada anteriormente por el área de notificación a través del botón de la barra de tareas de una aplicación. El área de notificación se encuentra en el borde derecho de la barra de tareas (si la barra de tareas es horizontal) o en la parte inferior (si la barra de tareas es vertical). Para obtener más información, vea Notificaciones y el área de notificación.

El área de notificación también muestra la hora actual si se selecciona esa opción. La opción se encuentra como:

  • Windows 7 y versiones posteriores: la lista desplegable Reloj de la página Activar o desactivar iconos del sistema de la aplicación Iconos de área de notificación Panel de control (también accesible a través de las propiedades del área de notificación).
  • Windows Vista: la casilla Reloj de la página Área de notificación de la ventana de propiedades Barra de tareas e Menú Inicio .
  • Windows XP: la casilla Mostrar el reloj en la ventana de propiedades Barra de tareas y Menú Inicio .

El usuario puede hacer clic con el botón derecho en la barra de tareas para mostrar el menú contextual. El menú contextual incluye comandos para ventanas en cascada, ventanas de pila, mostrar ventanas en paralelo, mostrar el escritorio, iniciar el Administrador de tareas y establecer las propiedades de la barra de tareas. El menú contextual también proporciona la opción de agregar o quitar un conjunto de barras de herramientas de la barra de tareas. Puede agregar nuevas barras de herramientas a este menú registrándolos en la categoría CATID_DeskBand. Para obtener más información, vea Implementar objetos band. Tenga en cuenta que a partir de Windows 7, la barra de tareas y el área de notificación tienen menús contextuales independientes. Estos menús contextuales comparten algunas opciones, como la disposición de ventanas, y agregan otras.

Opciones de presentación de la barra de tareas

La barra de tareas admite dos opciones de presentación: Ocultar automáticamente y, solo en Windows Vista y versiones anteriores, Always On Superior (la barra de tareas siempre está en este modo en Windows 7 y versiones posteriores). Para establecer estas opciones, el usuario debe abrir el menú contextual de la barra de tareas, hacer clic en Propiedades y activar o desactivar la casilla Ocultar automáticamente la barra de tareas o la casilla Mantener la barra de tareas encima de otras ventanas . Para recuperar el estado de estas opciones de presentación, use el mensaje ABM_GETSTATE . Si desea recibir una notificación cuando cambie el estado de estas opciones de presentación, procese el mensaje de notificación ABN_STATECHANGE en el procedimiento de ventana. Para cambiar el estado de estas opciones de presentación, use el mensaje ABM_SETSTATE .

El área de trabajo es la parte de la pantalla no oculta por la barra de tareas. Para recuperar el tamaño del área de trabajo, llame a la función SystemParametersInfo con el SPI_GETWORKAREA valor establecido. Para recuperar las coordenadas del rectángulo que describen la ubicación de la barra de tareas, use el mensaje ABM_GETTASKBARPOS .

Es posible cubrir la barra de tareas estableciendo explícitamente el tamaño del rectángulo de ventana igual al tamaño de la pantalla con SetWindowPos. Para los sistemas Windows 2000 o versiones posteriores, la ventana debe carecer de WS_CAPTION o WS_THICKFRAME, o bien la ventana debe tener un tamaño para que el área cliente cubra toda la pantalla. También en particular para esos sistemas, si la barra de tareas está establecida en Always On Superior, permanecerá oculta solo mientras la aplicación es la aplicación en primer plano.

Agregar accesos directos al menú Inicio

Para agregar un elemento al submenú Programas en Microsoft Windows NT 4.0, Windows 2000 y versiones posteriores, o Windows 95 o posterior, siga estos pasos.

  1. Cree un vínculo de shell mediante la interfaz IShellLink .
  2. Obtenga el PIDL de la carpeta Programas mediante SHGetSpecialFolderLocation, pasando CSIDL_PROGRAMS.
  3. Agregue el vínculo Shell a la carpeta Programas. También puede crear una carpeta en la carpeta Programas y agregar el vínculo a esa carpeta.

Administrar botones de la barra de tareas

El Shell crea un botón en la barra de tareas cada vez que una aplicación crea una ventana que no es propiedad de . Para asegurarse de que el botón de ventana se coloca en la barra de tareas, cree una ventana sin propietario con el estilo extendido WS_EX_APPWINDOW . Para evitar que el botón de ventana se coloque en la barra de tareas, cree la ventana no asociada con el estilo extendido WS_EX_TOOLWINDOW . Como alternativa, puede crear una ventana oculta y hacer que esta ventana oculta sea el propietario de la ventana visible.

El Shell quitará el botón de una ventana de la barra de tareas solo si el estilo de la ventana admite botones visibles de la barra de tareas. Si desea cambiar dinámicamente el estilo de una ventana a uno que no admita botones de barra de tareas visibles, primero debe ocultar la ventana (llamando a ShowWindow con SW_HIDE), cambiar el estilo de ventana y, a continuación, mostrar la ventana.

El botón de ventana normalmente contiene el icono y el título de la aplicación. Sin embargo, si la aplicación no contiene un menú del sistema, el botón de ventana se crea sin el icono.

Si desea que la aplicación reciba la atención del usuario cuando la ventana no esté activa, use la función FlashWindow para informar al usuario de que un mensaje está esperando. Esta función parpadea el botón de ventana. Una vez que el usuario hace clic en el botón de la ventana para activar la ventana, la aplicación puede mostrar el mensaje.

Modificar el contenido de la barra de tareas

La versión 4.71 y posteriores de Shell32.dll agrega la capacidad de modificar el contenido de la barra de tareas. Desde una aplicación, ahora puede agregar, quitar y activar botones de la barra de tareas. La activación del elemento no activa la ventana; muestra el elemento como presionado en la barra de tareas.

Las funcionalidades de modificación de la barra de tareas se implementan en un objeto modelo de objetos componentes (COM) (CLSID_TaskbarList ) que expone la interfaz ITaskbarList (IID_ITaskbarList). Debe llamar al método ITaskbarList::HrInit para inicializar el objeto. A continuación, puede usar los métodos de la interfaz ITaskbarList para modificar el contenido de la barra de tareas.

Agregar, modificar y eliminar iconos en el área de notificación

Use la función Shell_NotifyIcon para agregar, modificar o eliminar iconos del área de notificación. El parámetro dwMessage de Shell_NotifyIcon es un mensaje a la barra de tareas que especifica la acción que se va a realizar. El parámetro pnid es un puntero a una estructura NOTIFYICONDATA que se usa para identificar el icono y pasar cualquier información adicional necesaria para que el sistema procese el mensaje.

Puede realizar las siguientes acciones con iconos de área de notificación.

  • Para agregar un icono al área de notificación de la barra de tareas, llame a Shell_NotifyIcon con el parámetro dwMessage establecido en NIM_ADD. La estructura NOTIFYICONDATA se usa para especificar el identificador y el identificador del icono, y cualquier texto de información sobre herramientas. Si el usuario ha seleccionado la casilla Mostrar reloj en las propiedades de la barra de tareas, el sistema coloca el icono a la izquierda inmediata del reloj. De lo contrario, el icono aparece en el lado derecho o en la parte inferior de la barra de tareas. Los iconos existentes se desplazan a la izquierda para dejar espacio para el nuevo icono.
  • Para modificar la información de un icono, incluido su identificador de icono, texto de información sobre herramientas y identificador de mensaje de devolución de llamada, llame a Shell_NotifyIcon con dwMessage establecido en NIM_MODIFY.
  • Para eliminar un icono del área de notificación, llame a Shell_NotifyIcon con el parámetro dwMessage establecido en NIM_DELETE.

Cuando haya completado una operación de interfaz de usuario, devuelva el foco al área de notificación llamando a Shell_NotifyIcon con dwMessage establecido en NIM_SETFOCUS. Por ejemplo, puede hacerlo cuando un icono de barra de tareas muestre un menú contextual, pero el usuario lo cancela presionando la tecla ESCAPE.

Recepción de mensajes de devolución de llamada del área de notificación

Las aplicaciones suelen colocar iconos en el área de notificación de la barra de tareas para que sirvan como indicadores de estado. Puede proporcionar información adicional cuando el usuario realiza acciones del mouse, como mover el puntero del mouse sobre el icono o hacer clic en el icono.

El sistema le notifica los eventos de mouse y teclado mediante el envío de un mensaje de devolución de llamada definido por la aplicación asociado a un icono determinado. De este modo, el sistema puede notificar a una aplicación cuando el usuario, por ejemplo, hace clic en el icono o lo selecciona presionando una tecla.

Al agregar el icono a la barra de tareas, se define el mensaje de devolución de llamada de un icono. El identificador del mensaje de devolución de llamada se especifica en el miembro uCallbackMessage de la estructura NOTIFYICONDATA pasada con NIM_ADD. Cuando se produce un evento, el sistema envía el mensaje de devolución de llamada al procedimiento de ventana de la ventana especificada por el miembro hWnd . El parámetro wParam del mensaje contiene el identificador del icono de la barra de tareas en el que se produjo el evento. El parámetro lParam contiene el mensaje del mouse o del teclado asociado al evento . Por ejemplo, cuando el puntero del mouse se mueve a un icono de barra de tareas, lParam contiene WM_MOUSEMOVE.

Los resultados de varios eventos del mouse se pueden resumir de la siguiente manera:

  • Cuando el usuario mueve el puntero del mouse sobre el icono, el sistema muestra el texto de información sobre herramientas especificado en NOTIFYICONDATA.
  • Cuando el usuario hace clic en el icono, la aplicación recibe una notificación WM_LBUTTONDOWN .
  • Cuando el usuario hace clic con el botón derecho en el icono, la aplicación recibe una notificación WM_RBUTTONDOWN .
  • Cuando el usuario hace doble clic en el icono, la aplicación recibe una notificación WM_LBUTTONDBLCLK .

Normalmente, al hacer clic en el icono, la aplicación muestra una ventana con información adicional, al hacer clic con el botón derecho, se muestra un menú contextual y, al hacer doble clic, se ejecuta el comando de menú contextual predeterminado.

Para obtener un ejemplo de cómo cambiar el texto de información sobre herramientas asociado a un icono de área de notificación, vea Información sobre herramientas de globo para iconos de barra de estado.

Las versiones 5.0 y posteriores del shell controlan Shell_NotifyIcon eventos de mouse y teclado de maneras diferentes a las versiones anteriores de Shell que se encontraron en Windows NT 4.0, Windows 95 y Windows 98. Las diferencias son las siguientes:

  • Si un usuario solicita el menú contextual de un icono de notificación con el teclado, el shell de la versión 5.0 envía a la aplicación asociada un mensaje WM_CONTEXTMENU . Las versiones anteriores envían mensajes WM_RBUTTONDOWN y WM_RBUTTONUP .
  • Si un usuario selecciona un icono de notificación con el teclado y lo activa con la barra espaciadora o la tecla ENTRAR, el Shell de la versión 5.0 envía a la aplicación asociada una notificación NIN_KEYSELECT . Las versiones anteriores envían mensajes WM_RBUTTONDOWN y WM_RBUTTONUP .
  • Si un usuario selecciona un icono de notificación con el mouse y lo activa con la tecla ENTRAR, el Shell de la versión 5.0 envía a la aplicación asociada una notificación NIN_SELECT . Las versiones anteriores envían mensajes WM_RBUTTONDOWN y WM_RBUTTONUP .
  • Si un usuario pasa el puntero del mouse sobre un icono con el que está asociada una información sobre herramientas de globo, la versión 6.0 Shell (Windows XP) envía los siguientes mensajes.
      • NIN_BALLOONSHOW : se envía cuando se muestra el globo (los globos se ponen en cola).
      • NIN_BALLOONHIDE : se envía cuando desaparece el globo, por ejemplo, cuando se elimina el icono. Este mensaje no se envía si el globo se descarta debido a un tiempo de espera o un clic del mouse.
      • NIN_BALLOONTIMEOUT : se envía cuando se descarta el globo debido a un tiempo de espera.
      • NIN_BALLOONUSERCLICK : se envía cuando se descarta el globo debido a un clic del mouse.

Puede seleccionar la manera en que debe comportarse shell llamando a Shell_NotifyIcon con dwMessage establecido en NIM_SETVERSION. Establezca el miembro uVersion de la estructura NOTIFYICONDATA para indicar si desea el comportamiento de la versión 5.0 o anterior a la versión 5.0.

Notificación de creación de la barra de tareas

Con Microsoft Internet Explorer 4.0 y versiones posteriores, shell notifica a las aplicaciones que se han creado la barra de tareas. Cuando se crea la barra de tareas, registra un mensaje con la cadena TaskbarCreated y, a continuación, difunde este mensaje a todas las ventanas de nivel superior. Cuando la aplicación de la barra de tareas recibe este mensaje, debe suponer que se han quitado los iconos de la barra de tareas que ha agregado y los vuelve a agregar. Esta característica se aplica generalmente solo a los servicios que ya se ejecutan cuando se inicia el Shell. En el ejemplo siguiente se muestra un método muy simplificado para controlar este caso.

En Windows 10, la barra de tareas también difunde este mensaje cuando cambia el valor de PPP de la pantalla principal.

LRESULT CALLBACK WndProc(HWND hWnd, 
                         UINT uMessage, 
                         WPARAM wParam, 
                         LPARAM lParam)
{
    static UINT s_uTaskbarRestart;

    switch(uMessage)
    {
        case WM_CREATE:
            s_uTaskbarRestart = RegisterWindowMessage(TEXT("TaskbarCreated"));
            break;
        
        default:
            if(uMessage == s_uTaskbarRestart)
                AddTaskbarIcons();
            break;
    }

    return DefWindowProc(hWnd, uMessage, wParam, lParam);
}

Uso de la barra de tareas

En esta sección se incluyen ejemplos que muestran cómo agregar iconos al área de notificación de la barra de tareas y cómo procesar los mensajes de devolución de llamada para los iconos de la barra de tareas.

Agregar y eliminar iconos de la barra de tareas en el área de notificación

Agregue un icono al área de notificación de la barra de tareas rellenando una estructura NOTIFYICONDATA y pasando la estructura a Shell_NotifyIcon con dwMessage establecido en NIM_ADD. Los miembros de la estructura deben especificar el identificador de la ventana que agrega el icono, así como el identificador del icono y el identificador del icono. También puede especificar texto de información sobre herramientas para el icono. Si necesita recibir mensajes del mouse para el icono, especifique el identificador del mensaje de devolución de llamada que el sistema debe usar para enviar el mensaje al procedimiento de ventana.

La función del ejemplo siguiente muestra cómo agregar un icono a la barra de tareas.

// MyTaskBarAddIcon - adds an icon to the notification area. 
// Returns TRUE if successful, or FALSE otherwise. 
// hwnd - handle to the window to receive callback messages 
// uID - identifier of the icon 
// hicon - handle to the icon to add 
// lpszTip - tooltip text 

BOOL MyTaskBarAddIcon(HWND hwnd, UINT uID, HICON hicon, LPSTR lpszTip) 
{ 
    BOOL res; 
    NOTIFYICONDATA tnid; 
 
    tnid.cbSize = sizeof(NOTIFYICONDATA); 
    tnid.hWnd = hwnd; 
    tnid.uID = uID; 
    tnid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP; 
    tnid.uCallbackMessage = MYWM_NOTIFYICON; 
    tnid.hIcon = hicon; 
    if (lpszTip) 
        hr = StringCbCopyN(tnid.szTip, sizeof(tnid.szTip), lpszTip, 
                           sizeof(tnid.szTip));
        // TODO: Add error handling for the HRESULT.
    else 
        tnid.szTip[0] = (TCHAR)'\0'; 
 
    res = Shell_NotifyIcon(NIM_ADD, &tnid); 
 
    if (hicon) 
        DestroyIcon(hicon); 
 
    return res; 
}

Para eliminar un icono del área de notificación de la barra de tareas, rellene una estructura NOTIFYICONDATA y llame a Shell_NotifyIcon con dwMessage establecido en NIM_DELETE. Al eliminar un icono de barra de tareas, especifique solo los miembros cbSize, hWnd y uID de la estructura. Por ejemplo:

// MyTaskBarDeleteIcon - deletes an icon from the notification area. 
// Returns TRUE if successful, or FALSE otherwise. 
// hwnd - handle to the window that added the icon. 
// uID - identifier of the icon to delete. 

BOOL MyTaskBarDeleteIcon(HWND hwnd, UINT uID) 
{ 
    BOOL res; 
    NOTIFYICONDATA tnid; 
 
    tnid.cbSize = sizeof(NOTIFYICONDATA); 
    tnid.hWnd = hwnd; 
    tnid.uID = uID; 
         
    res = Shell_NotifyIcon(NIM_DELETE, &tnid); 
    return res; 
}

Recepción de eventos del mouse

Si especifica un mensaje de devolución de llamada para un icono de barra de tareas, el sistema envía el mensaje a la aplicación cada vez que se produce un evento del mouse en el rectángulo delimitador del icono. El parámetro wParam del mensaje especifica el identificador del icono de la barra de tareas y el parámetro lParam del mensaje especifica el mensaje que el sistema generó como resultado del evento del mouse.

La función del ejemplo siguiente procede de una aplicación que agrega iconos de batería e impresora a la barra de tareas. La aplicación llama a la función cuando recibe un mensaje de devolución de llamada. La función determina si el usuario ha realizado clic en uno de los iconos y, si se ha producido un clic, llama a una función definida por la aplicación para mostrar información de estado.

// On_MYWM_NOTIFYICON - processes callback messages for taskbar icons. 
// wParam - first message parameter of the callback message. 
// lParam - second message parameter of the callback message. 

void On_MYWM_NOTIFYICON(WPARAM wParam, LPARAM lParam) 
{ 
    UINT uID; 
    UINT uMouseMsg; 
 
    uID = (UINT) wParam; 
    uMouseMsg = (UINT) lParam; 
 
    if (uMouseMsg == WM_LBUTTONDOWN) 
    { 
        switch (uID) 
        { 
            case IDI_MYBATTERYICON: 
 
                // The user clicked the battery icon. Display the 
                // battery status. 
                ShowBatteryStatus(); 
                break; 
 
            case IDI_MYPRINTERICON: 
 
                // The user clicked the printer icon. Display the 
                // status of the print job. 
                ShowJobStatus(); 
                break; 
 
            default: 
                break; 
        } 
     } 

     return; 
 }