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 status. Il peut également être utilisé pour afficher des icônes pour les fonctionnalités système et de programme qui n’ont aucune présence sur le bureau, telles que le niveau de la batterie, le contrôle du volume et les status réseau. La zone de notification a été appelée historiquement la barre d’état système ou status zone.

Cette rubrique contient les sections suivantes :

Instructions relatives aux zones de notification et de notification

Consultez les sections Notifications et Zone de notification des Instructions d’interaction de l’expérience utilisateur Windows pour connaître les meilleures pratiques en matière d’utilisation des notifications et de la zone de notification. L’objectif est de fournir des avantages à l’utilisateur par l’utilisation appropriée des notifications, sans être ennuyeux ou distrayant.

La zone de notification ne concerne pas les informations critiques qui doivent être immédiatement mises en place. Il n’est pas non plus destiné à un accès rapide au programme ou aux commandes. À partir de Windows 7, la plupart de ces fonctionnalités sont mieux réalisées via 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. Ainsi, la conception et l’utilisation des notifications réfléchies inclinent l’utilisateur pour permettre à votre application de continuer à les afficher. Les notifications sont une interruption ; s’assurer qu’ils en valent la peine.

Windows 7 introduit le concept de « temps calme ». Le temps de silence 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 à niveau du système d’exploitation ou propre installation. Ce temps est mis de côté 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 commentaires que l’utilisateur s’attend à voir en réponse à une action de l’utilisateur, par exemple lorsqu’il connecte un périphérique USB ou imprime un document. Les spécificités de l’API concernant le temps calme sont abordées plus loin dans cette rubrique.

Création et affichage d’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 NOTIFYICONDATA
  3. Définir l’apparence et le contenu de la notification
  4. Vérifier l’état de l’utilisateur
  5. Afficher la notification
  6. Suppression d’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 la batterie, cette icône sera déjà présente. Dans de nombreux autres cas, toutefois, vous allez ajouter une icône à la zone de notification uniquement tant que nécessaire pour afficher la notification. Dans les deux cas, cela s’effectue à l’aide de 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 sur Windows 7, elle est ajoutée à la section de dépassement de capacité de la zone de notification par défaut. Cette zone contient des icônes de zone de notification qui sont actives, mais qui ne sont pas visibles dans la zone de notification. Seul l’utilisateur peut promouvoir une icône du dépassement de capacité à la zone de notification, même si, dans certaines circonstances, le système peut temporairement promouvoir une icône dans la zone de notification en tant que courte préversion (moins d’une minute).

Notes

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 temporaire dans la zone de notification, l’autorisation doit être demandée à l’utilisateur. Ils doivent également avoir l’option (normalement dans 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 zone de notification et la notification elle-même. Voici les éléments spécifiques de l’icône de zone de notification elle-même qui peuvent être définis via NOTIFYICONDATA.

  • Ressource à partir de laquelle l’icône est extraite.
  • Identificateur unique de l’icône.
  • Style de l’info-bulle de l’icône.
  • État de l’icône (masqué, partagé ou les deux) dans la zone de notification.
  • Handle d’une fenêtre d’application associée à l’icône.
  • Identificateur de message de rappel qui permet à l’icône de communiquer les événements qui se produisent dans le rectangle englobant et la notification de bulle de l’icône avec la fenêtre d’application associée. Le rectangle englobant de l’icône peut être récupéré via Shell_NotifyIconGetRect.

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

  • GUID avec lequel l’icône est déclarée dans le Registre. Il s’agit de la méthode préférée sur Windows 7 et versions ultérieures.
  • Handle d’une fenêtre associée à l’icône de zone de notification, plus un identificateur d’icône défini par l’application. Cette méthode est utilisée sur Windows Vista et les versions antérieures.

Les icônes de la zone de notification peuvent avoir une info-bulle. L’info-bulle peut être une info-bulle standard (par défaut) ou une interface utilisateur contextuelle dessinée par l’application. Bien qu’une info-bulle ne soit pas obligatoire, elle est recommandée.

Les icônes de zone de notification doivent être très sensibles aux ppp. Une application doit fournir une icône de 16 x 16 pixels et une icône de 32 x 32 dans son fichier de ressources, puis utiliser LoadIconMetric pour s’assurer que l’icône appropriée est chargée et mise à l’échelle de manière appropriée.

L’application responsable de l’icône de zone de notification doit gérer un clic de souris pour cette icône. Lorsqu’un utilisateur clique avec le bouton droit sur l’icône, un menu contextuel normal doit apparaître. Toutefois, le résultat d’un simple clic avec le bouton gauche de la souris varie selon la fonction de l’icône. Il doit afficher ce que l’utilisateur s’attend à voir dans 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 instance, il peut afficher status texte pour une icône de status ou un curseur pour le contrôle de volume.

L’emplacement d’une fenêtre contextuelle ou d’une boîte de dialogue qui résulte 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 de notification en définissant uniquement les membres spécifiques à l’icône de NOTIFYICONDATA (abordés ci-dessus) et en appelant Shell_NotifyIcon comme illustré 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, suivez les instructions de cette rubrique.

Définir la version NOTIFYICONDATA

Au fur et à mesure que Windows a progressé, la structure NOTIFYICONDATA s’est développée pour inclure davantage de membres afin de définir davantage de fonctionnalités. Les constantes sont utilisées pour déclarer la version de NOTIFYICONDATA à utiliser avec l’icône de votre zone de notification, afin de permettre la compatibilité descendante. Sauf s’il existe une raison irréfutable de faire autrement, il est vivement recommandé d’utiliser la version NOTIFYICON_VERSION_4, introduite dans Windows Vista. Cette version fournit toutes les fonctionnalités disponibles, notamment la possibilité d’identifier l’icône de zone de notification par le biais d’un GUID inscrit, d’un mécanisme de rappel supérieur et d’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 de notification.

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

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

Capture d’écran de la 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 zone de notification et la bulle de notification elle-même. Voici les éléments spécifiques à la notification qui peuvent être définis via NOTIFYICONDATA.

  • 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 les icônes personnalisées.
  • Titre de notification. Ce titre doit contenir un maximum de 48 caractères en anglais (pour prendre en charge la localisation). Le titre est la première ligne de la notification et se distingue par l’utilisation de la taille de police, de la couleur et du poids.
  • Texte à utiliser dans le corps de la notification. Ce texte doit contenir un maximum de 200 caractères en anglais (pour prendre en charge la localisation).
  • Indique si la notification doit être ignorée si elle ne peut pas être affichée immédiatement.
  • Délai d’expiration de la notification. Ce paramètre est ignoré dans Windows Vista et les systèmes ultérieurs au profit d’un paramètre de délai d’attente d’accessibilité à l’échelle du système.
  • Indique si la notification doit respecter l’heure de silence, définie via l’indicateur NIIF_RESPECT_QUIET_TIME .

Notes

Les interfaces IUserNotification et IUserNotification2 sont des wrappers COM (Component Object Model) pour Shell_NotifyIcon. Toutefois, à l’heure actuelle, ils ne fournissent pas la totalité des fonctionnalités NOTIFYICON_VERSION_4 disponibles via Shell_NotifyIcon directement, y compris l’utilisation d’un GUID pour identifier l’icône de zone de notification.

 

Vérifier l’état de l’utilisateur

Le système utilise la fonction SHQueryUserNotificationState pour case activée si l’utilisateur est en temps calme, loin de l’ordinateur ou dans un état non ininterrupable tel que le mode Présentation. Le fait que le système affiche votre notification dépend de cet état.

Notes

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 l’affichage, mais comme vous ne pouvez pas savoir quand l’utilisateur retournera ou si la notification sera toujours valide à ce moment-là, vous pouvez envisager de renvoyer la notification ultérieurement.

Les notifications envoyées pendant l’heure de silence sont ignorées. Les instructions de conception demandent que toutes les notifications soient ignorées. Elles ne doivent pas nécessiter d’action immédiate de l’utilisateur. Par conséquent, aucune notification n’est si importante qu’elle doit remplacer le temps de silence.

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 zone de notification n’est pas présente, appelez Shell_NotifyIcon pour ajouter l’icône. Effectuez cette opération pour les icônes temporaires et non temporaires.

    NOTIFYICONDATA nid = {};
    ...                    
    Shell_NotifyIcon(NIM_ADD, &nid);
    
  • Si l’icône de 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 de 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é dans 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;

Suppression d’une icône

Pour supprimer une icône (pour instance, lorsque vous avez uniquement ajouté l’icône temporairement pour diffuser une notification), appelez Shell_NotifyIconcomme indiqué ici. Seule une structure NOTIFYICONDATA minimale qui identifie l’icône est nécessaire dans cet appel.

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

Notes

Lorsqu’une application est désinstallée, son icône de zone de notification peut toujours apparaître pour l’utilisateur en tant qu’option dans la page Icônes de zone de notification du Panneau de configuration pendant sept jours maximum. Toutefois, les modifications apportées à cet endroit n’auront aucun effet.

 

Exemple de KIT de développement logiciel (SDK

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

Shell_NotifyIcon

Shell_NotifyIconGetRect

NOTIFYICONDATA

SHQueryUserNotificationState

IUserNotification

IUserNotification2

Barre des tâches

Extensions de la barre des tâches