Partilhar via


Notificações e Área de Notificação

A área de notificação é uma parte da barra de tarefas que fornece uma fonte temporária para notificações e status. Ele também pode ser usado para exibir ícones para recursos do sistema e do programa que não têm presença na área de trabalho, como nível de bateria, controle de volume e status da rede. A área de notificação tem sido conhecida historicamente como a bandeja do sistema ou área de status.

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

Diretrizes da área de notificação e notificação

Consulte as seções de Notificações e Área de Notificação do de Diretrizes de Interação da Experiência do Usuário do Windows para obter as práticas recomendadas no uso de notificações e na área de notificação. O objetivo é proporcionar benefícios ao usuário através do uso adequado de notificações, sem ser irritante ou distrator.

A área de notificação não é para informações críticas que devem ser acionadas imediatamente. Também não se destina a acesso rápido a programas ou comandos. A partir do Windows 7, grande parte dessa funcionalidade é melhor realizada através do botão da barra de tarefas de um aplicativo.

O Windows 7 permite que um usuário suprima todas as notificações de um aplicativo, se desejar, portanto, o design e o uso cuidadosos de notificações inclinarão o usuário a permitir que seu aplicativo continue a exibi-las. As notificações são uma interrupção; Certifique-se de que valem a pena.

O Windows 7 introduz o conceito de "tempo de silêncio". O tempo de silêncio é definido como a primeira hora após um novo utilizador iniciar sessão na sua conta pela primeira vez ou pela primeira vez após uma atualização do sistema operativo ou uma instalação limpa. Esse tempo é reservado para permitir que o usuário explore e se familiarize com o novo ambiente sem a distração de notificações. Durante esse período, a maioria das notificações não deve ser enviada ou mostrada. As exceções incluem comentários que o usuário esperaria ver em resposta a uma ação do usuário, como quando ele ou ela conecta um dispositivo USB ou imprime um documento. As especificidades da API em relação ao tempo de silêncio são discutidas mais adiante neste tópico.

Criando e exibindo uma notificação

As seções restantes neste tópico descrevem o procedimento básico a ser seguido para exibir uma notificação do seu aplicativo para o usuário.

  1. Adicionar um ícone de notificação
  2. Definir a versão NOTIFYICONDATA
  3. Definir a aparência e o conteúdo da notificação
  4. Verificar o status do usuário
  5. Exibir o de notificação
  6. Remover um ícone

Adicionar um ícone de notificação

Para exibir uma notificação, você deve ter um ícone na área de notificação. Em certos casos, como o Microsoft Communicator ou o nível da bateria, esse ícone já estará presente. Em muitos outros casos, no entanto, você adicionará um ícone à área de notificação apenas o tempo necessário para mostrar a notificação. Em ambos os casos, isso é feito usando a função Shell_NotifyIcon. Shell_NotifyIcon permite adicionar, modificar ou excluir um ícone na área de notificação.

área de notificação contendo três ícones

Quando um ícone é adicionado à área de notificação no Windows 7, ele é adicionado à seção de estouro da área de notificação por padrão. Esta área contém ícones da área de notificação que estão ativos, mas não visíveis na área de notificação. Somente o usuário pode promover um ícone do estouro para a área de notificação, embora em certas circunstâncias o sistema possa promover temporariamente um ícone na área de notificação como uma breve visualização (menos de um minuto).

Observação

O usuário deve ter a palavra final sobre quais ícones deseja ver em sua área de notificação. Antes de instalar um ícone não transitório na área de notificação, deve ser solicitada permissão ao usuário. Eles também devem ter a opção (normalmente através de seu menu de atalho) para remover o ícone da área de notificação.

 

A estruturaNOTIFYICONDATA enviada na chamada para Shell_NotifyIcon contém informações que especificam o ícone da área de notificação e a própria notificação. A seguir estão os itens específicos para o ícone da área de notificação em si que podem ser definidos através NOTIFYICONDATA.

  • O recurso do qual o ícone é tirado.
  • Um identificador exclusivo para o ícone.
  • O estilo da dica de ferramenta do ícone.
  • O estado do ícone (oculto, compartilhado ou ambos) na área de notificação.
  • O identificador de uma janela de aplicativo associada ao ícone.
  • Um identificador de mensagem de retorno de chamada que permite que o ícone comunique eventos que ocorrem dentro do retângulo delimitador do ícone e notificação de balão com a janela do aplicativo associada. O retângulo delimitador do ícone pode ser recuperado através Shell_NotifyIconGetRect.

Cada ícone na área de notificação pode ser identificado de duas maneiras:

  • O GUID com o qual o ícone é declarado no registro. Este é o método preferido no Windows 7 e posterior.
  • O identificador de uma janela associada ao ícone da área de notificação, além de um identificador de ícone definido pelo aplicativo. Esse método é usado no Windows Vista e versões anteriores.

Os ícones na área de notificação podem ter uma dica de ferramenta. A dica de ferramenta pode ser uma dica de ferramenta padrão (preferencial) ou uma interface do usuário pop-up desenhada pelo aplicativo. Embora uma dica de ferramenta não seja necessária, ela é recomendada.

Os ícones da área de notificação devem estar cientes de DPI alto. Um aplicativo deve fornecer um ícone de pixel 16x16 e um ícone 32x32 em seu arquivo de recurso e, em seguida, usar LoadIconMetric para garantir que o ícone correto seja carregado e dimensionado adequadamente.

O aplicativo responsável pelo ícone da área de notificação deve lidar com um clique do mouse para esse ícone. Quando um usuário clica com o botão direito do mouse no ícone, ele deve abrir um menu de atalho normal. No entanto, o resultado de um único clique com o botão esquerdo do mouse irá variar com a função do ícone. Ele deve exibir o que o usuário esperaria ver na forma mais adequada para esse conteúdo — uma janela pop-up, uma caixa de diálogo ou a própria janela do programa. Por exemplo, ele pode mostrar o texto de status para um ícone de status ou um controle deslizante para o controle de volume.

O posicionamento de uma janela pop-up ou caixa de diálogo que resulta do clique deve ser colocado perto da coordenada do clique na área de notificação. Use o CalculatePopupWindowPosition para determinar sua localização.

O ícone pode ser adicionado à área de notificação sem exibir uma notificação, definindo apenas os membros específicos do ícone de NOTIFYICONDATA (discutido acima) e chamando Shell_NotifyIcon como mostrado aqui:

NOTIFYICONDATA nid = {};
// Do NOT set the NIF_INFO flag.
...                    
Shell_NotifyIcon(NIM_ADD, &nid);

Você também pode adicionar o ícone à área de notificação e exibir uma notificação em uma única chamada para Shell_NotifyIcon. Para fazer isso, continue com as instruções neste tópico.

Definir a versão NOTIFYICONDATA

À medida que o Windows progrediu, a estruturaNOTIFYICONDATA expandiu-se para incluir mais membros para definir mais funcionalidades. As constantes são usadas para declarar qual versão do NOTIFYICONDATA usar com o ícone da área de notificação, para permitir a compatibilidade com versões anteriores. A menos que haja uma razão convincente para fazer o contrário, é altamente recomendável que você use a versão NOTIFYICON_VERSION_4, introduzida no Windows Vista. Esta versão fornece a funcionalidade completa disponível, incluindo a capacidade preferencial de identificar o ícone da área de notificação através de um GUID registrado, um mecanismo de retorno de chamada superior e melhor acessibilidade.

Defina a versão através das seguintes chamadas:

NOTIFYICONDATA nid = {};
... 
nid.uVersion = NOTIFYICON_VERSION_4;
// Add the icon
Shell_NotifyIcon(NIM_ADD, &nid);
// Set the version
Shell_NotifyIcon(NIM_SETVERSION, &nid);

Observe que essa chamada para Shell_NotifyIcon não exibe uma notificação.

Definir a aparência e o conteúdo da notificação

Uma notificação é um tipo especial de controle de dica de ferramenta de balão. Ele contém um título, corpo de texto e um ícone. Como uma janela, ele tem um botão Fechar no canto superior direito. Ele também contém um botão Opções de que abre o item Ícones da Área de Notificação no Painel de Controle, que permite ao usuário mostrar ou ocultar o ícone ou mostrar apenas notificações sem um ícone.

captura de tela do balão de notificação indicando que a bateria está com pouca energia

A estruturaNOTIFYICONDATA enviada na chamada para Shell_NotifyIcon contém informações que especificam o ícone da área de notificação e o próprio balão de notificação. A seguir estão os itens específicos para a notificação que podem ser definidos através NOTIFYICONDATA.

  • Um ícone a ser exibido no balão de notificação, que é especificado pelo tipo de notificação. O tamanho do ícone pode ser especificado, bem como ícones personalizados.
  • Um título de notificação. Este título deve ter no máximo 48 caracteres em inglês (para acomodar a localização). O título é a primeira linha da notificação e separado através do uso do tamanho da fonte, cor e peso.
  • Texto a utilizar no corpo da notificação. Este texto deve ter no máximo 200 caracteres em inglês (para acomodar a localização).
  • Se a notificação deve ser descartada se não puder ser exibida imediatamente.
  • Um tempo limite para a notificação. Essa configuração é ignorada no Windows Vista e em sistemas posteriores em favor de uma configuração de tempo limite de acessibilidade em todo o sistema.
  • Se a notificação deve respeitar o tempo de silêncio, definido através da bandeira NIIF_RESPECT_QUIET_TIME.

Observação

O IUserNotification e IUserNotification2 interfaces são wrappers COM (Component Object Model) para Shell_NotifyIcon. No entanto, no momento, eles não fornecem a funcionalidade de NOTIFYICON_VERSION_4 completa disponível através Shell_NotifyIcon diretamente, incluindo o uso de um GUID para identificar o ícone da área de notificação.

 

Verificar o status do usuário

O sistema usa o função SHQueryUserNotificationState é usada para verificar se o usuário está em tempo de silêncio, longe do computador ou em um estado ininterrupto, como o modo de apresentação. Se o sistema exibe sua notificação depende desse estado.

Observação

Se seu aplicativo estiver usando um método de notificação personalizado que não use Shell_NotifyIcon, IUserNotificationou IUserNotification2, ele deve sempre chamar explicitamente SHQueryUserNotificationState para determinar se ele deve exibir a interface do usuário de notificação naquele momento.

 

As notificações enviadas quando o usuário está ausente são enfileiradas para exibição, mas como você não pode saber quando o usuário retornará ou se a notificação ainda será válida naquele momento, você pode considerar reenviar a notificação mais tarde.

As notificações enviadas durante o tempo de silêncio são descartadas sem serem exibidas. As diretrizes de design pedem que todas as notificações sejam ignoradas. Eles não devem exigir ação imediata do usuário. Portanto, nenhuma notificação é tão importante que deva substituir o tempo de silêncio.

Exibir a notificação

Depois de definir a versãoNOTIFYICONDATA e definir a notificação em uma estrutura NOTIFYICONDATA, chame Shell_NotifyIcon para exibir o ícone.

  • Se o ícone da área de notificação não estiver presente, ligue para Shell_NotifyIcon para adicionar o ícone. Faça isso para ícones transitórios e não transitórios.

    NOTIFYICONDATA nid = {};
    ...                    
    Shell_NotifyIcon(NIM_ADD, &nid);
    
  • Se o ícone da área de notificação já estiver presente, chame Shell_NotifyIcon para modificar o ícone.

    NOTIFYICONDATA nid = {};
    ...                    
    Shell_NotifyIcon(NIM_MODIFY, &nid);
    

O código a seguir mostra um exemplo de configuração NOTIFYICONDATA dados e enviá-los através de Shell_NotifyIcon. Observe que este exemplo identifica o ícone de notificação por meio de um GUID (preferencial no Windows 7).

// Declare NOTIFYICONDATA details. 
    // Error handling is omitted here for brevity. Do not omit it in your code.
    
    NOTIFYICONDATA nid = {};
    nid.cbSize = sizeof(nid);
    nid.hWnd = hWnd;
    nid.uFlags = NIF_ICON | NIF_TIP | NIF_GUID;
    
    // Note: This is an example GUID only and should not be used.
    // Normally, you should use a GUID-generating tool to provide the value to
    // assign to guidItem.
    static const GUID myGUID = 
    {0x23977b55, 0x10e0, 0x4041, {0xb8, 0x62, 0xb1, 0x95, 0x41, 0x96, 0x36, 0x69}};
    nid.guidItem = myGUID;
    
    // This text will be shown as the icon's tooltip.
    StringCchCopy(nid.szTip, ARRAYSIZE(nid.szTip), L"Test application");
    
    // Load the icon for high DPI.
    LoadIconMetric(hInst, MAKEINTRESOURCE(IDI_SMALL), LIM_SMALL, &(nid.hIcon));
    
    // Show the notification.
    Shell_NotifyIcon(NIM_ADD, &nid) ? S_OK : E_FAIL;

Remover um ícone

Para remover um ícone, por exemplo, quando você tiver adicionado o ícone temporariamente para transmitir uma notificação, ligue para Shell_NotifyIconconforme mostrado aqui. Apenas uma estrutura mínima NOTIFYICONDATA que identifique o ícone é necessária nesta chamada.

NOTIFYICONDATA nid = {};
...                    
Shell_NotifyIcon(NIM_DELETE, &nid);

Observação

Quando um aplicativo é desinstalado, seu ícone de área de notificação ainda pode aparecer para o usuário como uma opção na página Ícones da área de notificação no Painel de controle por até sete dias. No entanto, quaisquer alterações aí introduzidas não terão qualquer efeito.

 

Exemplo de SDK

Consulte o Exemplo de NotificationIcon exemplo no Windows Software Development Kit (SDK) para obter um exemplo completo do uso do Shell_NotifyIcon.

Shell_NotifyIcon

Shell_NotifyIconGetRect

NOTIFYICONDATA

SHQueryUserNotificationState

IUserNotification

IUserNotification2

A barra de tarefas

Extensões da barra de tarefas