Partilhar via


A barra de tarefas

A interface do Windows inclui uma barra de ferramentas especial da área de trabalho do aplicativo chamada de barra de tarefas . Você pode usar a barra de tarefas para tarefas como alternar entre janelas abertas e iniciar novos aplicativos.

Observação

Para obter informações sobre as alterações feitas na barra de tarefas a partir do Windows 7, consulte Extensões da barra de tarefas.

 

Este tópico contém as seguintes seções.

Sobre a barra de tarefas

A barra de tarefas inclui o seguinte:

  • Iniciar menu
  • Barra de Início Rápido (somente Windows Vista e versões anteriores)
  • Botões da barra de tarefas
  • Barras de ferramentas (opcional)
  • Área de notificação

O menu Iniciar contém comandos que podem acessar programas, documentos e configurações. Esses comandos incluem Todos os Programas, Documentos, Painel de Controle, Jogos, Ajuda e Suporte, Desligare Pesquisar programas e arquivos.

O Iniciar em versões anteriores do Windows continha itens como Localizar e Executar, cuja funcionalidade foi incluída em Pesquisar programas e arquivos no Windows Vista e versões posteriores.

A barra de Início Rápido, disponível em versões do Windows anteriores ao Windows 7, contém atalhos para aplicativos. O Windows fornece entradas padrão, como o Windows Internet Explorer, e o usuário pode adicionar quaisquer outros atalhos que escolher. Os ícones nesta área respondem a um único clique. No Windows 7 e versões posteriores, essa funcionalidade está incluída nos botões da barra de tarefas.

O Shell coloca um botão na barra de tarefas sempre que um aplicativo cria uma janela sem dono, ou seja, uma janela que não tem um pai e que tem os bits de estilo estendido apropriados (consulte Gerenciando botões da barra de tarefas, abaixo). Para alternar para uma janela, o usuário clica no botão da janela. Esta funcionalidade foi grandemente expandida a partir do Windows 7. Para obter mais informações, consulte Extensões da barra de tarefas.

Os aplicativos podem colocar ícones na área de notificação para indicar o status de uma operação ou para notificar o usuário sobre um evento. Por exemplo, um aplicativo pode colocar um ícone de impressora na área de notificação para mostrar que um trabalho de impressão está em andamento. No entanto, no Windows 7 e posterior, algumas das informações fornecidas anteriormente pela área de notificação devem ser fornecidas através do botão da barra de tarefas de um aplicativo. A área de notificação está localizada na borda direita da barra de tarefas (se a barra de tarefas for horizontal) ou na parte inferior (se a barra de tarefas for vertical). Para obter mais informações, consulte Notificações e a Área de Notificação.

A área de notificação também exibe a hora atual se essa opção estiver selecionada. A opção encontra-se como:

  • Windows 7 e versões posteriores: A lista suspensa Relógio na página Ativar ou desativar ícones do sistema do aplicativo Ícones da Área de Notificação Painel de Controle (também acessível através das propriedades da área de notificação).
  • Windows Vista: A caixa de seleção Relógio na página Área de Notificação da janela de propriedades Barra de Tarefas e Menu Iniciar.
  • Windows XP: A caixa de seleção 'Mostrar o relógio' na janela de propriedades da barra de tarefas e do menu Iniciar .

O usuário pode clicar com o botão direito do mouse na barra de tarefas para exibir o menu de atalho. O menu de atalho inclui comandos para janelas em cascata, janelas de empilhamento, mostrar janelas lado a lado, mostrar a área de trabalho, iniciar o Gerenciador de Tarefas e definir as propriedades da barra de tarefas. O menu de atalho também oferece a opção de adicionar ou remover um conjunto de barras de ferramentas da barra de tarefas. Você pode adicionar novas barras de ferramentas a este menu registrando-as na categoria CATID_DeskBand. Para obter mais informações, consulte Implementando objetos de banda. Observe que, a partir do Windows 7, a barra de tarefas e a área de notificação têm menus de atalho separados. Esses menus de atalho compartilham algumas opções, como a organização de janelas, e adicionam outras.

Opções de exibição da barra de tarefas

A barra de tarefas suporta duas opções de visualização: Auto-Hide e, apenas no Windows Vista e anteriores, Always On Top (a barra de tarefas está sempre neste modo no Windows 7 e posterior). Para definir essas opções, o usuário deve abrir o menu de atalho da barra de tarefas, clicar em Propriedadese marcar ou desmarcar a caixa de seleção ocultar automaticamente a barra de tarefas ou a caixa de seleção Manter a barra de tarefas sobre outras janelas. Para recuperar o estado dessas opções de exibição, use a mensagem ABM_GETSTATE. Se você quiser ser notificado quando o estado dessas opções de exibição mudar, processe a mensagem de notificação ABN_STATECHANGE no procedimento da janela. Para alterar o estado dessas opções de exibição, use a mensagem ABM_SETSTATE.

A área de trabalho é a parte da tela não obscurecida pela barra de tarefas. Para recuperar o tamanho da área de trabalho, chame a função SystemParametersInfo com o valor SPI_GETWORKAREA definido. Para recuperar as coordenadas do retângulo que descrevem o local da barra de tarefas, use a mensagem ABM_GETTASKBARPOS.

É possível cobrir a barra de tarefas definindo explicitamente o tamanho do retângulo da janela igual ao tamanho da tela com SetWindowPos. Para sistemas Windows 2000 ou posteriores, a janela deve não ter WS_CAPTION ou WS_THICKFRAME, ou então a janela deve ser dimensionada para que a área do cliente cubra toda a tela. Também específico para esses sistemas, se a barra de tarefas estiver definida como Always On Top, ela permanecerá oculta apenas enquanto o aplicativo for o aplicativo em primeiro plano.

Adicionando atalhos ao menu Iniciar

Para adicionar um item ao submenu programas no Microsoft Windows NT 4.0, Windows 2000 e posterior, ou Windows 95 ou posterior, siga estas etapas.

  1. Crie um link de shell usando a interface IShellLink .
  2. Obtenha o PIDL da pasta Programas utilizando SHGetSpecialFolderLocation, passando CSIDL_PROGRAMS.
  3. Adicione o link Shell à pasta Programas. Você também pode criar uma pasta na pasta Programas e adicionar o link para essa pasta.

Gerenciando botões da barra de tarefas

O Shell cria um botão na barra de tarefas sempre que um aplicativo cria uma janela que não é de propriedade. Para garantir que o botão da janela seja colocado na barra de tarefas, crie uma janela sem dono com o estilo WS_EX_APPWINDOW estendido. Para evitar que o botão de janela seja colocado na barra de tarefas, crie a janela sem propriedade com o estilo WS_EX_TOOLWINDOW estendido. Como alternativa, você pode criar uma janela oculta e tornar essa janela oculta o proprietário da sua janela visível.

O Shell removerá o botão de uma janela da barra de tarefas somente se o estilo da janela suportar botões visíveis da barra de tarefas. Se quiser alterar dinamicamente o estilo de uma janela para uma que não suporte botões visíveis da barra de tarefas, você deve ocultar a janela primeiro (chamando ShowWindow com SW_HIDE), altere o estilo da janela e, em seguida, mostre a janela.

O botão da janela normalmente contém o ícone e o título do aplicativo. No entanto, se o aplicativo não contém um menu do sistema, o botão da janela é criado sem o ícone.

Se você quiser que seu aplicativo chame a atenção do usuário quando a janela não estiver ativa, use a função FlashWindow para informar o usuário de que uma mensagem está esperando. Esta função faz piscar o botão da janela. Uma vez que o usuário clica no botão da janela para ativar a janela, seu aplicativo pode exibir a mensagem.

Modificando o conteúdo da barra de tarefas

Versão 4.71 e posterior do Shell32.dll adiciona a capacidade de modificar o conteúdo da barra de tarefas. A partir de um aplicativo, agora você pode adicionar, remover e ativar botões da barra de tarefas. Ativar o item não ativa a janela; ele mostra o item pressionado na barra de tarefas.

Os recursos de modificação da barra de tarefas são implementados em um objeto COM (Component Object Model) (CLSID_TaskbarList ) que expõe o ITaskbarList interface (IID_ITaskbarList). Você deve chamar o ITaskbarList::HrInit método para inicializar o objeto. Em seguida, você pode usar os métodos do ITaskbarList interface para modificar o conteúdo da barra de tarefas.

Adicionar, modificar e excluir ícones na área de notificação

Use a função Shell_NotifyIcon para adicionar, modificar ou excluir ícones da área de notificação. O parâmetro dwMessage de Shell_NotifyIcon é uma mensagem para a barra de tarefas que especifica a ação a ser executada. O parâmetro pnid é um ponteiro para uma estruturaNOTIFYICONDATA que é usada para identificar o ícone e passar qualquer informação adicional necessária para o sistema processar a mensagem.

Você pode executar as seguintes ações com ícones da área de notificação.

  • Para adicionar um ícone à área de notificação da barra de tarefas, chame Shell_NotifyIcon com o parâmetro dwMessage definido como NIM_ADD. A estrutura NOTIFYICONDATA é usada para especificar o identificador e o handle do ícone, bem como qualquer texto de dica de ferramenta. Se o utilizador tiver marcado a caixa de seleção Mostrar Relógio nas propriedades da barra de tarefas, o sistema colocará o ícone imediatamente à esquerda do relógio. Caso contrário, o ícone aparecerá no lado direito ou na parte inferior da barra de tarefas. Todos os ícones existentes são deslocados para a esquerda para abrir espaço para o novo ícone.
  • Para modificar as informações de um ícone, incluindo o seu identificador de ícone, texto de dica e identificador de mensagem de retorno de chamada, chame Shell_NotifyIcon com dwMessage definido como NIM_MODIFY.
  • Para excluir um ícone da área de notificação, chame Shell_NotifyIcon com o parâmetro dwMessage definido como NIM_DELETE.

Quando você tiver concluído uma operação de interface do usuário, retorne o foco para a área de notificação chamando Shell_NotifyIcon com dwMessage definido como NIM_SETFOCUS. Por exemplo, você pode fazer isso quando um ícone da barra de tarefas exibe um menu de atalho, mas o usuário o cancela pressionando a tecla ESCAPE.

Recebendo notificações de retorno de chamada da área de notificação

Os aplicativos geralmente colocam ícones na área de notificação da barra de tarefas para servir como indicadores de status. Você pode fornecer informações adicionais quando o usuário executa ações do mouse, como mover o ponteiro do mouse sobre o ícone ou clicar no ícone.

O sistema notifica você sobre eventos de mouse e teclado enviando uma mensagem de retorno de chamada definida pelo aplicativo que está associada a um ícone específico. Desta forma, o sistema pode notificar um aplicativo quando o usuário, por exemplo, clica no ícone ou o seleciona pressionando uma tecla.

Você define a mensagem de retorno de chamada de um ícone quando adiciona o ícone à barra de tarefas. O identificador de mensagem de retorno de chamada é especificado no membro uCallbackMessage da estrutura NOTIFYICONDATA que é passada com NIM_ADD. Quando ocorre um evento, o sistema envia a mensagem de callback para o procedimento de janela da janela especificada pelo membro hWnd. O parâmetro wParam da mensagem contém o identificador do ícone da barra de tarefas no qual o evento ocorreu. O parâmetro lParam contém a mensagem do mouse ou teclado associada ao evento. Por exemplo, quando o ponteiro do mouse se move para um ícone da barra de tarefas, lParam contém WM_MOUSEMOVE.

Os resultados de vários eventos do mouse podem ser resumidos da seguinte forma:

  • Quando o usuário move o ponteiro do mouse sobre o ícone, o sistema exibe o texto da dica de ferramenta especificado em NOTIFYICONDATA.
  • Quando o usuário clica no ícone, seu aplicativo recebe uma notificação de WM_LBUTTONDOWN.
  • Quando o usuário clica com o botão direito do mouse no ícone, seu aplicativo recebe uma notificação de WM_RBUTTONDOWN.
  • Quando o usuário clica duas vezes no ícone, seu aplicativo recebe uma notificação de WM_LBUTTONDBLCLK.

Normalmente, clicar no ícone faz com que o aplicativo exiba uma janela com informações adicionais, clicar com o botão direito do mouse exibe um menu de atalho e clicar duas vezes executa o comando de menu de atalho padrão.

Para obter um exemplo de como alterar o texto da dica de ferramenta associado a um ícone de área de notificação, consulte Balloon Tooltips for Status Bar Icons.

As versões 5.0 e posteriores do Shell manipulam eventos de mouse e teclado Shell_NotifyIcon de maneiras diferentes das versões anteriores do Shell encontradas no Windows NT 4.0, Windows 95 e Windows 98. As diferenças são as seguintes:

  • Se um usuário solicitar um menu de atalho do ícone de notificação com o teclado, o Shell versão 5.0 enviará ao aplicativo associado uma mensagem WM_CONTEXTMENU. As versões anteriores enviam mensagens WM_RBUTTONDOWN e WM_RBUTTONUP.
  • Se um usuário selecionar um ícone de notificação com o teclado e ativá-lo com a barra de espaço ou a tecla ENTER, o Shell versão 5.0 enviará ao aplicativo associado uma notificação NIN_KEYSELECT. As versões anteriores enviam mensagens WM_RBUTTONDOWN e WM_RBUTTONUP.
  • Se um usuário selecionar um ícone de notificação com o mouse e ativá-lo com a tecla ENTER, o Shell versão 5.0 enviará ao aplicativo associado uma notificação NIN_SELECT. As versões anteriores enviam mensagens WM_RBUTTONDOWN e WM_RBUTTONUP.
  • Se um utilizador passar o ponteiro do rato sobre um ícone ao qual está associada uma dica de ferramenta em forma de balão, a versão 6.0 do Shell (Windows XP) enviará as seguintes mensagens.
      • NIN_BALLOONSHOW - Enviado quando o balão é mostrado (balões estão na fila).
      • NIN_BALLOONHIDE - Enviado quando o balão desaparece, por exemplo, quando o ícone é excluído. Essa mensagem não será enviada se o balão for descartado devido a um tempo limite ou um clique do mouse.
      • NIN_BALLOONTIMEOUT - Enviado quando o balão é descartado por causa de um tempo limite.
      • NIN_BALLOONUSERCLICK - Enviado quando o balão é descartado por causa de um clique do mouse.

Você pode selecionar de que maneira o Shell deve se comportar chamando Shell_NotifyIcon com dwMessage definido como NIM_SETVERSION. Defina o membro uVersion da estrutura NOTIFYICONDATA para indicar se pretende o comportamento da versão 5.0 ou anterior à versão 5.0.

Notificação de criação da barra de tarefas

Com o Microsoft Internet Explorer 4.0 e posterior, o Shell notifica os aplicativos que a barra de tarefas foi criada. Quando a barra de tarefas é criada, ela registra uma mensagem com a cadeia de caracteres TaskbarCreated e, em seguida, transmite essa mensagem para todas as janelas de nível superior. Quando o aplicativo da barra de tarefas recebe essa mensagem, ele deve assumir que todos os ícones da barra de tarefas adicionados foram removidos e adicioná-los novamente. Esse recurso geralmente se aplica apenas a serviços que já estão em execução quando o Shell é iniciado. O exemplo a seguir mostra um método muito simplificado para lidar com esse caso.

No Windows 10, a barra de tarefas também transmite essa mensagem quando o DPI da exibição principal é alterado.

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);
}

Usando a barra de tarefas

Esta seção inclui exemplos que demonstram como adicionar ícones à área de notificação da barra de tarefas e como processar mensagens de retorno de chamada para ícones da barra de tarefas.

Adicionando e excluindo ícones da barra de tarefas na área de notificação

Você adiciona um ícone à área de notificação da barra de tarefas preenchendo uma estrutura de NOTIFYICONDATA e, em seguida, passa a estrutura para Shell_NotifyIcon com dwMessage definido como NIM_ADD . Os membros da estrutura devem especificar o handle para a janela que está adicionando o ícone, bem como o identificador de ícone e o handle de ícone. Você também pode especificar o texto da dica de ferramenta para o ícone. Se você precisar receber mensagens do mouse para o ícone, especifique o identificador da mensagem de retorno de chamada que o sistema deve usar para enviar a mensagem para o procedimento da janela.

A função no exemplo a seguir demonstra como adicionar um ícone à barra de tarefas.

// 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 excluir um ícone da área de notificação da barra de tarefas, preencha uma estrutura de NOTIFYICONDATA e chame Shell_NotifyIcon com dwMessage configurado para NIM_DELETE. Ao excluir um ícone da barra de tarefas, especifique apenas o cbSize, hWnde uID membros da estrutura. Por exemplo:

// 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; 
}

Recebendo eventos do mouse

Se você especificar uma mensagem de retorno de chamada para um ícone da barra de tarefas, o sistema enviará a mensagem para seu aplicativo sempre que ocorrer um evento do mouse no retângulo delimitador do ícone. O parâmetro wParam da mensagem especifica o identificador do ícone da barra de tarefas e o parâmetro lParam da mensagem especifica a mensagem que o sistema gerou como resultado do evento do mouse.

A função no exemplo a seguir é de um aplicativo que adiciona ícones de bateria e impressora à barra de tarefas. O aplicativo chama a função quando recebe uma mensagem de retorno de chamada. A função determina se o usuário clicou em um dos ícones e, se ocorreu um clique, chama uma função definida pelo aplicativo para exibir informações de status.

// 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; 
 }