Partager via


Notifications et zone de notification

La zone de notification est une partie de la barre des tâches qui fournit une source temporaire pour les notifications et les statuts. Elle peut également être utilisée pour afficher des icônes de fonctionnalités système et de programmes qui n’ont pas de présence sur le bureau, comme le niveau de batterie, le contrôle du volume et l’état du réseau. La zone de notification a été historiquement connue sous le nom de zone de statut ou de zone de système.

Cette rubrique contient les sections suivantes :

Instructions pour les notifications et la zone de notification

Veuillez consulter les sections Notifications et Zone de notification des Instructions d’interaction de l’expérience utilisateur Windows pour voir les bonnes pratiques dans l’utilisation des notifications et de la zone de notification. L’objectif est de fournir un bénéfice utilisateur par une utilisation appropriée des notifications, sans être gênant ou distrayant.

La zone de notification n’est pas destinée aux informations critiques qui doivent être traitées immédiatement. Il n’est pas non plus destiné à un accès rapide aux programmes ou aux commandes. Depuis Windows 7, une grande partie de cette fonctionnalité est mieux accomplie par le bouton de la barre des tâches d’une application.

Windows 7 permet à un utilisateur de supprimer toutes les notifications d’une application s’il le souhaite, donc une conception et une utilisation réfléchies des notifications inciteront l’utilisateur à autoriser votre application à continuer de les afficher. Les notifications sont une interruption ; assurez-vous qu’elles en valent la peine.

Windows 7 introduit le concept de « temps calme ». Le temps calme est défini comme la première heure après qu’un nouvel utilisateur se connecte à son compte pour la première fois ou pour la première fois après une mise à jour du système d’exploitation ou une installation propre. Ce temps est réservé pour permettre à l’utilisateur d’explorer et de se familiariser avec le nouvel environnement sans la distraction des notifications. Pendant ce temps, la plupart des notifications ne doivent pas être envoyées ou affichées. Les exceptions incluent les retours que l’utilisateur s’attendrait à voir en réponse à une action utilisateur, comme lorsqu’il ou elle branche un périphérique USB ou imprime un document. Les détails de l’API concernant le temps calme sont discutés plus loin dans cette rubrique.

Créer et afficher une notification

Les sections restantes de cette rubrique décrivent la procédure de base à suivre pour afficher une notification de votre application à l’utilisateur.

  1. Ajouter une icône de notification
  2. Définir la version de NOTIFYICONDATA
  3. Définir l’apparence et le contenu de la notification
  4. Vérifier le statut de l’utilisateur
  5. Afficher la notification
  6. Supprimer une icône

Ajouter une icône de notification

Pour afficher une notification, vous devez avoir une icône dans la zone de notification. Dans certains cas, comme Microsoft Communicator ou le niveau de batterie, cette icône sera déjà présente. Dans de nombreux autres cas, cependant, vous ajouterez une icône à la zone de notification uniquement tant que nécessaire pour afficher la notification. Dans les deux cas, cela se fait en utilisant la fonction Shell_NotifyIcon. Shell_NotifyIcon vous permet d’ajouter, de modifier ou de supprimer une icône dans la zone de notification.

zone de notification contenant trois icônes

Lorsqu’une icône est ajoutée à la zone de notification sous Windows 7, elle est ajoutée à la section de débordement de la zone de notification par défaut. Cette zone contient des icônes de la zone de notification qui sont actives, mais non visibles dans la zone de notification. Seul l’utilisateur peut promouvoir une icône de la section de débordement vers la zone de notification, bien que dans certaines circonstances, le système puisse temporairement promouvoir une icône dans la zone de notification comme un aperçu court (moins d’une minute).

Remarque

L’utilisateur doit avoir le dernier mot sur les icônes qu’il souhaite voir dans sa zone de notification. Avant d’installer une icône non transitoire dans la zone de notification, l’utilisateur doit être invité à donner son autorisation. Il doit également avoir la possibilité (normalement via son menu contextuel) de supprimer l’icône de la zone de notification.

 

La structure NOTIFYICONDATA envoyée dans l’appel à Shell_NotifyIcon contient des informations qui spécifient à la fois l’icône de la zone de notification et la notification elle-même. Les éléments suivants sont ceux spécifiques à l’icône de la zone de notification elle-même qui peuvent être définis via NOTIFYICONDATA.

  • La ressource à partir de laquelle l’icône est tirée.
  • Un identifiant unique pour l’icône.
  • Le style de l’infobulle de l’icône.
  • L’état de l’icône (caché, partagé ou les deux) dans la zone de notification.
  • Le handle d’une fenêtre d’application associée à l’icône.
  • Un identifiant de message de rappel qui permet à l’icône de communiquer les événements qui se produisent dans le rectangle délimitant l’icône et la bulle de notification avec la fenêtre d’application associée. Le rectangle délimitant de l’icône peut être récupéré via Shell_NotifyIconGetRect.

Chaque icône de la zone de notification peut être identifiée de deux manières :

  • Le GUID avec lequel l’icône est déclarée dans le registre. C’est la méthode préférée sous Windows 7 et les versions ultérieures.
  • Le handle d’une fenêtre associée à l’icône de la zone de notification, plus un identifiant d’icône défini par l’application. Cette méthode est utilisée sous Windows Vista et versions antérieures.

Les icônes de la zone de notification peuvent avoir une infobulle. L’infobulle peut être soit une infobulle standard (préférée), soit une interface utilisateur contextuelle dessinée par l’application. Bien qu’une infobulle ne soit pas requise, elle est recommandée.

Les icônes de la zone de notification doivent être conscientes de la haute résolution (DPI élevé). Une application doit fournir à la fois une icône de 16x16 pixels et une icône de 32x32 dans son fichier de ressources, puis utiliser LoadIconMetric pour s’assurer que l’icône correcte est chargée et mise à l’échelle de manière appropriée.

L’application responsable de l’icône de la zone de notification doit gérer un clic de souris pour cette icône. Lorsqu’un utilisateur fait un clic droit sur l’icône, il doit afficher un menu contextuel normal. Cependant, le résultat d’un clic unique avec le bouton gauche de la souris variera en fonction de la fonction de l’icône. Il doit afficher ce que l’utilisateur s’attendrait à voir sous la forme la mieux adaptée à ce contenu—une fenêtre contextuelle, une boîte de dialogue ou la fenêtre du programme elle-même. Par exemple, il pourrait afficher un texte de statut pour une icône de statut, ou un curseur pour le contrôle du volume.

Le placement d’une fenêtre contextuelle ou d’une boîte de dialogue résultant du clic doit être placé près de la coordonnée du clic dans la zone de notification. Utilisez CalculatePopupWindowPosition pour déterminer son emplacement.

L’icône peut être ajoutée à la zone de notification sans afficher une notification en définissant uniquement les membres spécifiques à l’icône de NOTIFYICONDATA (discutés ci-dessus) et en appelant Shell_NotifyIcon comme indiqué ici :

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

Vous pouvez également ajouter l’icône à la zone de notification et afficher une notification en un seul appel à Shell_NotifyIcon. Pour ce faire, continuez avec les instructions de cette rubrique.

Définir la version de NOTIFYICONDATA

Au fur et à mesure que Windows a évolué, la structure NOTIFYICONDATA s’est élargie pour inclure davantage de membres pour définir plus de fonctionnalités. Des constantes sont utilisées pour déclarer quelle version de NOTIFYICONDATA utiliser avec votre icône de la zone de notification, pour permettre la compatibilité ascendante. Sauf s’il y a une raison impérieuse de faire autrement, il est fortement recommandé d’utiliser la version NOTIFYICON_VERSION_4, introduite dans Windows Vista. Cette version fournit la pleine fonctionnalité disponible, y compris la capacité préférée d’identifier l’icône de la zone de notification via un GUID enregistré, un mécanisme de rappel supérieur et une meilleure accessibilité.

Définissez la version via les appels suivants :

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

Notez que cet appel à Shell_NotifyIcon n’affiche pas une notification.

Définir l’apparence et le contenu de la notification

Une notification est un type spécial de contrôle de bulle d’infobulle. Elle contient un titre, un texte de corps et une icône. Comme une fenêtre, elle a un bouton Fermer dans son coin supérieur droit. Elle contient également un bouton Options qui ouvre l’élément Icônes de la zone de notification dans le Panneau de configuration, ce qui permet à l’utilisateur de montrer ou de cacher l’icône ou de montrer uniquement les notifications sans une icône.

capture d’écran de bulle de notification indiquant que la batterie est faible

La structure NOTIFYICONDATA envoyée dans l’appel à Shell_NotifyIcon contient des informations qui spécifient à la fois l’icône de la zone de notification et la bulle de notification elle-même. Les éléments suivants sont ceux spécifiques à l’icône de la Les éléments suivants sont ceux spécifiques à la notification qui peuvent être définis via NOTIFYICONDATA.

  • Une icône à afficher dans la bulle de notification, qui est spécifiée par le type de notification. La taille de l’icône peut être spécifiée, ainsi que des icônes personnalisées.
  • Un titre de notification. Ce titre doit comporter un maximum de 48 caractères en anglais (pour tenir compte de la localisation). Le titre est la première ligne de la notification, et se distingue par l’utilisation de la taille, de la couleur et du poids de la police.
  • Texte à utiliser dans le corps de la notification. Ce texte doit comporter un maximum de 200 caractères en anglais (pour tenir compte de la localisation).
  • Si la notification doit être supprimée si elle ne peut pas être affichée immédiatement.
  • Un délai d’expiration pour la notification. Ce paramètre est ignoré dans Windows Vista et versions ultérieures au profit d’un paramètre de délai d’expiration d’accessibilité à l’échelle du système.
  • Si la notification doit respecter le temps calme, défini via l’indicateur NIIF_RESPECT_QUIET_TIME.

Remarque

Les interfaces IUserNotification et IUserNotification2 sont des wrappers Component Object Model (COM) pour Shell_NotifyIcon. Cependant, à ce jour, elles ne fournissent pas la pleine fonctionnalité NOTIFYICON_VERSION_4 disponible via Shell_NotifyIcon directement, y compris l’utilisation d’un GUID pour identifier l’icône de la zone de notification.

 

Vérifier le statut de l’utilisateur

Le système utilise la fonction SHQueryUserNotificationState pour vérifier si l’utilisateur est en temps calme, éloigné de l’ordinateur ou dans un état qui ne peut être interrompu tel que le mode Présentation. Si le système affiche votre notification dépend de cet état.

Remarque

Si votre application utilise une méthode de notification personnalisée qui n’utilise pas Shell_NotifyIcon, IUserNotification, ou IUserNotification2, elle doit toujours appeler explicitement SHQueryUserNotificationState pour déterminer si elle doit afficher l’interface utilisateur de notification à ce moment-là.

 

Les notifications envoyées lorsque l’utilisateur est absent sont mises en file d’attente pour affichage, mais comme vous ne pouvez pas savoir quand l’utilisateur reviendra ou si la notification sera toujours valide à ce moment-là, vous pouvez envisager de renvoyer la notification plus tard.

Les notifications envoyées pendant le temps calme sont supprimées sans être affichées. Les lignes directrices en matière de conception demandent que toutes les notifications puissent être ignorées. Elles ne doivent pas nécessiter une action immédiate de l’utilisateur. Par conséquent, aucune notification n’est si importante qu’elle doive ignorer le temps calme.

Afficher la notification

Une fois que vous avez défini la version NOTIFYICONDATA et défini la notification dans une structure NOTIFYICONDATA, appelez Shell_NotifyIcon pour afficher l’icône.

  • Si l’icône de la zone de notification n’est pas présente, appelez Shell_NotifyIcon pour ajouter l’icône. Faites cela pour les icônes transitoires et non transitoires.

    NOTIFYICONDATA nid = {};
    ...                    
    Shell_NotifyIcon(NIM_ADD, &nid);
    
  • Si l’icône de la zone de notification est déjà présente, appelez Shell_NotifyIcon pour modifier l’icône.

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

Le code suivant montre un exemple de définition des données NOTIFYICONDATA et de leur envoi via Shell_NotifyIcon. Notez que cet exemple identifie l’icône de notification via un GUID (préféré sous 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;

Supprimer une icône

Pour supprimer une icône, par exemple lorsque vous avez seulement ajouté l’icône temporairement pour diffuser une notification, appelez Shell_NotifyIcon comme indiqué ici. Seule une structure minimale NOTIFYICONDATA qui identifie l’icône est nécessaire dans cet appel.

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

Remarque

Lorsqu’une application est désinstallée, son icône de la zone de notification peut encore apparaître pour l’utilisateur comme une option dans la page Icônes de la zone de notification dans le Panneau de configuration pendant jusqu’à sept jours. Cependant, toute modification apportée là-bas n’aura aucun effet.

 

Exemple SDK

Consultez l’exemple NotificationIcon dans le Kit de développement logiciel (SDK) Windows pour voir un exemple complet de l’utilisation de Shell_NotifyIcon.

Shell_NotifyIcon

Shell_NotifyIconGetRect

NOTIFYICONDATA

SHQueryUserNotificationState

IUserNotification

IUserNotification2

Barre des tâches

Extensions de la barre des tâches