Barre des tâches

L’interface Windows comprend une barre d’outils de bureau d’application spéciale appelée barre des tâches. Vous pouvez utiliser la barre des tâches pour des tâches telles que le basculement entre des fenêtres ouvertes et le démarrage de nouvelles applications.

Notes

Pour plus d’informations sur les modifications apportées à la barre des tâches à partir de Windows 7, consultez Extensions de la barre des tâches.

 

Cette rubrique contient les sections suivantes.

À propos de la barre des tâches

La barre des tâches comprend les éléments suivants :

  • Menu Démarrer
  • Barre de lancement rapide (Windows Vista et versions antérieures uniquement)
  • Boutons de la barre des tâches
  • Barres d’outils (facultatif)
  • Zone Notifications

Le menu Démarrer contient des commandes qui peuvent accéder aux programmes, aux documents et aux paramètres. Ces commandes incluent Tous les programmes, documents, Panneau de configuration, Jeux, Aide et support, Arrêter et Rechercher des programmes et fichiers.

Le menu Démarrer dans les versions antérieures de Windows contenait des éléments tels que Rechercher et exécuter, dont les fonctionnalités étaient incluses dans les programmes et fichiers de recherche dans Windows Vista et versions ultérieures.

La barre de lancement rapide, disponible dans les versions de Windows antérieures à Windows 7, contient des raccourcis vers les applications. Windows fournit des entrées par défaut, telles que Windows Internet Explorer, et l’utilisateur peut ajouter d’autres raccourcis de son choix. Les icônes de cette zone répondent à un simple clic. Dans Windows 7 et versions ultérieures, cette fonctionnalité est incluse dans les boutons de la barre des tâches.

L’interpréteur de commandes place un bouton sur la barre des tâches chaque fois qu’une application crée une fenêtre non propriétaire, c’est-à-dire une fenêtre qui n’a pas de parent et qui a les bits de style étendu appropriés (voir Gestion des boutons de la barre des tâches, ci-dessous). Pour basculer vers une fenêtre, l’utilisateur clique sur son bouton de fenêtre. Cette fonctionnalité a été considérablement développée à partir de Windows 7. Pour plus d’informations, consultez Extensions de la barre des tâches.

Les applications peuvent placer des icônes dans la zone de notification pour indiquer la status d’une opération ou pour informer l’utilisateur d’un événement. Par exemple, une application peut placer une icône d’imprimante dans la zone de notification pour indiquer qu’un travail d’impression est en cours. Toutefois, dans Windows 7 et versions ultérieures, certaines des informations précédemment fournies par la zone de notification doivent être fournies via le bouton de la barre des tâches d’une application. La zone de notification se trouve au bord droit de la barre des tâches (si la barre des tâches est horizontale) ou en bas (si la barre des tâches est verticale). Pour plus d’informations, consultez Notifications et zone de notification.

La zone de notification affiche également l’heure actuelle si cette option est sélectionnée. L’option est trouvée comme suit :

  • Windows 7 et versions ultérieures : liste déroulante Horloge de la page Activer ou désactiver les icônes système de l’application Icônes de zone de notification Panneau de configuration application (également accessible via les propriétés de la zone de notification).
  • Windows Vista : zone Horloge case activée dans la page Zone de notification de la fenêtre propriétés de la barre des tâches et du menu Démarrer.
  • Windows XP : zone Afficher le case activée de l’horloge dans la fenêtre des propriétés de la barre des tâches et du menu Démarrer.

L’utilisateur peut cliquer avec le bouton droit sur la barre des tâches pour afficher le menu contextuel. Le menu contextuel comprend des commandes permettant de cascader des fenêtres, de les empiler, d’afficher les fenêtres côte à côte, d’afficher le bureau, de démarrer le Gestionnaire des tâches et de définir les propriétés de la barre des tâches. Le menu contextuel offre également la possibilité d’ajouter ou de supprimer un ensemble de barres d’outils de la barre des tâches. Vous pouvez ajouter de nouvelles barres d’outils à ce menu en les inscrivant sous la catégorie CATID_DeskBand. Pour plus d’informations, consultez Implémentation d’objets de bande. Notez qu’à partir de Windows 7, la barre des tâches et la zone de notification ont des menus contextuels distincts. Ces menus contextuels partagent certaines options, telles que la disposition des fenêtres, et en ajoutent d’autres.

Options d’affichage de la barre des tâches

La barre des tâches prend en charge deux options d’affichage : Masquer automatiquement et, dans Windows Vista et les versions antérieures uniquement, Always On Haut (la barre des tâches est toujours dans ce mode dans Windows 7 et versions ultérieures). Pour définir ces options, l’utilisateur doit ouvrir le menu contextuel de la barre des tâches, cliquer sur Propriétés, puis sélectionner ou décochez la zone Masquer automatiquement la barre des tâches case activée ou conserver la barre des tâches au-dessus d’autres fenêtres case activée zone. Pour récupérer l’état de ces options d’affichage, utilisez le message ABM_GETSTATE . Si vous souhaitez être averti lorsque l’état de ces options d’affichage change, traitez le message de notification ABN_STATECHANGE dans votre procédure de fenêtre. Pour modifier l’état de ces options d’affichage, utilisez le message ABM_SETSTATE .

La zone de travail est la partie de l’écran qui n’est pas masquée par la barre des tâches. Pour récupérer la taille de la zone de travail, appelez la fonction SystemParametersInfo avec la valeur SPI_GETWORKAREA définie. Pour récupérer les coordonnées de rectangle qui décrivent l’emplacement de la barre des tâches, utilisez le message ABM_GETTASKBARPOS .

Il est possible de couvrir la barre des tâches en définissant explicitement la taille du rectangle de fenêtre égale à la taille de l’écran avec SetWindowPos. Pour les systèmes Windows 2000 ou versions ultérieures, la fenêtre ne doit pas être WS_CAPTION ou WS_THICKFRAME, sinon la fenêtre doit être dimensionnée de sorte que la zone cliente couvre l’ensemble de l’écran. En outre, en particulier pour ces systèmes, si la barre des tâches est définie sur Always On Top, elle reste masquée uniquement lorsque l’application est l’application de premier plan.

Ajout de raccourcis au menu Démarrer

Pour ajouter un élément au sous-menu Programmes sur Microsoft Windows NT 4.0, Windows 2000 et versions ultérieures, ou Windows 95 ou version ultérieure, procédez comme suit.

  1. Créez un lien d’interpréteur de commandes à l’aide de l’interface IShellLink .
  2. Obtenez le PIDL du dossier Programs à l’aide de SHGetSpecialFolderLocation, en passant CSIDL_PROGRAMS.
  3. Ajoutez le lien Shell au dossier Programmes. Vous pouvez également créer un dossier dans le dossier Programmes et ajouter le lien vers ce dossier.

Gestion des boutons de la barre des tâches

L’interpréteur de commandes crée un bouton dans la barre des tâches chaque fois qu’une application crée une fenêtre qui n’est pas détenue. Pour vous assurer que le bouton de la fenêtre est placé sur la barre des tâches, créez une fenêtre sans propriétaire avec le style étendu WS_EX_APPWINDOW . Pour empêcher le bouton de fenêtre d’être placé sur la barre des tâches, créez la fenêtre sans propriétaire avec le style étendu WS_EX_TOOLWINDOW . Vous pouvez également créer une fenêtre masquée et faire de cette fenêtre masquée le propriétaire de votre fenêtre visible.

L’interpréteur de commandes supprime le bouton d’une fenêtre de la barre des tâches uniquement si le style de la fenêtre prend en charge les boutons de la barre des tâches visibles. Si vous souhaitez modifier dynamiquement le style d’une fenêtre en un style qui ne prend pas en charge les boutons de la barre des tâches visibles, vous devez d’abord masquer la fenêtre (en appelant ShowWindow avec SW_HIDE), modifier le style de la fenêtre, puis afficher la fenêtre.

Le bouton de fenêtre contient généralement l’icône et le titre de l’application. Toutefois, si l’application ne contient pas de menu système, le bouton de fenêtre est créé sans l’icône.

Si vous souhaitez que votre application obtienne l’attention de l’utilisateur lorsque la fenêtre n’est pas active, utilisez la fonction FlashWindow pour informer l’utilisateur qu’un message est en attente. Cette fonction clignote le bouton de la fenêtre. Une fois que l’utilisateur clique sur le bouton de la fenêtre pour activer la fenêtre, votre application peut afficher le message.

Modification du contenu de la barre des tâches

La version 4.71 et ultérieure de Shell32.dll ajoute la possibilité de modifier le contenu de la barre des tâches. À partir d’une application, vous pouvez maintenant ajouter, supprimer et activer des boutons de barre des tâches. L’activation de l’élément n’active pas la fenêtre ; il montre l’élément tel qu’il est enfoncé dans la barre des tâches.

Les fonctionnalités de modification de la barre des tâches sont implémentées dans un objet COM (CLSID_TaskbarList ) qui expose l’interface ITaskbarList (IID_ITaskbarList). Vous devez appeler la méthode ITaskbarList::HrInit pour initialiser l’objet. Vous pouvez ensuite utiliser les méthodes de l’interface ITaskbarList pour modifier le contenu de la barre des tâches.

Ajout, modification et suppression d’icônes dans la zone de notification

Utilisez la fonction Shell_NotifyIcon pour ajouter, modifier ou supprimer des icônes de la zone de notification. Le paramètre dwMessage de Shell_NotifyIcon est un message à la barre des tâches qui spécifie l’action à entreprendre. Le paramètre pnid est un pointeur vers une structure NOTIFYICONDATA qui permet d’identifier l’icône et de transmettre toutes les informations supplémentaires nécessaires au traitement du message par le système.

Vous pouvez effectuer les actions suivantes avec des icônes de zone de notification.

  • Pour ajouter une icône à la zone de notification de la barre des tâches, appelez Shell_NotifyIcon avec le paramètre dwMessage défini sur NIM_ADD. La structure NOTIFYICONDATA est utilisée pour spécifier le handle et l’identificateur de l’icône, ainsi que tout texte d’info-bulle. Si l’utilisateur a sélectionné la zone Afficher l’horloge case activée dans les propriétés de la barre des tâches, le système place l’icône à gauche immédiate de l’horloge. Sinon, l’icône apparaît sur le côté droit ou en bas de la barre des tâches. Toutes les icônes existantes sont déplacées vers la gauche pour faire de la place pour la nouvelle icône.
  • Pour modifier les informations d’une icône, notamment son handle d’icône, son texte d’info-bulle et son identificateur de message de rappel, appelez Shell_NotifyIcon avec dwMessage défini sur NIM_MODIFY.
  • Pour supprimer une icône de la zone de notification, appelez Shell_NotifyIcon avec le paramètre dwMessage défini sur NIM_DELETE.

Une fois que vous avez terminé une opération d’interface utilisateur, retournez le focus sur la zone de notification en appelant Shell_NotifyIcon avec dwMessage défini sur NIM_SETFOCUS. Par exemple, vous pouvez le faire lorsqu’une icône de barre des tâches affiche un menu contextuel, mais que l’utilisateur l’annule en appuyant sur la touche ESCAPE.

Réception de messages de rappel de zone de notification

Les applications placent généralement des icônes dans la zone de notification de la barre des tâches pour servir d’indicateurs status. Vous pouvez fournir des informations supplémentaires lorsque l’utilisateur effectue des actions de souris, par exemple en déplaçant le pointeur de la souris sur l’icône ou en cliquant sur l’icône.

Le système vous avertit des événements de souris et de clavier en envoyant un message de rappel défini par l’application associé à une icône particulière. De cette façon, le système peut notifier une application lorsque l’utilisateur, pour instance, clique sur l’icône ou la sélectionne en appuyant sur une touche.

Vous définissez le message de rappel d’une icône lorsque vous ajoutez l’icône à la barre des tâches. L’identificateur de message de rappel est spécifié dans le membre uCallbackMessage de la structure NOTIFYICONDATA passé avec NIM_ADD. Lorsqu’un événement se produit, le système envoie le message de rappel à la procédure de fenêtre de la fenêtre spécifiée par le membre hWnd . Le paramètre wParam du message contient l’identificateur de l’icône de barre des tâches dans laquelle l’événement s’est produit. Le paramètre lParam contient le message de souris ou de clavier associé à l’événement. Par exemple, lorsque le pointeur de la souris se déplace sur une icône de barre des tâches, lParam contient WM_MOUSEMOVE.

Les résultats de différents événements de souris peuvent être résumés comme suit :

  • Lorsque l’utilisateur déplace le pointeur de la souris sur l’icône, le système affiche le texte d’info-bulle spécifié dans NOTIFYICONDATA.
  • Lorsque l’utilisateur clique sur l’icône, votre application reçoit une notification WM_LBUTTONDOWN .
  • Lorsque l’utilisateur clique avec le bouton droit sur l’icône, votre application reçoit une notification WM_RBUTTONDOWN .
  • Lorsque l’utilisateur double-clique sur l’icône, votre application reçoit une notification WM_LBUTTONDBLCLK .

En règle générale, en cliquant sur l’icône, l’application affiche une fenêtre avec des informations supplémentaires, un clic droit affiche un menu contextuel et un double-clic exécute la commande de menu contextuel par défaut.

Pour obtenir un exemple de modification du texte d’info-bulle associé à une icône de zone de notification, consultez Info-bulles pour les icônes de barre d’état.

Les versions 5.0 et ultérieures de l’interpréteur de commandes gèrent Shell_NotifyIcon événements de souris et de clavier de différentes manières que les versions antérieures de l’interpréteur de commandes disponibles sur Windows NT 4.0, Windows 95 et Windows 98. Les différences sont les suivantes :

  • Si un utilisateur demande le menu contextuel d’une icône de notification avec le clavier, l’interpréteur de commandes version 5.0 envoie à l’application associée un message WM_CONTEXTMENU . Les versions antérieures envoient des messages WM_RBUTTONDOWN et WM_RBUTTONUP .
  • Si un utilisateur sélectionne une icône de notification avec le clavier et l’active avec la barre d’espace ou la touche ENTRÉE, l’interpréteur de commandes version 5.0 envoie à l’application associée une notification NIN_KEYSELECT . Les versions antérieures envoient des messages WM_RBUTTONDOWN et WM_RBUTTONUP .
  • Si un utilisateur sélectionne une icône de notification avec la souris et l’active avec la touche ENTRÉE, l’interpréteur de commandes version 5.0 envoie à l’application associée une notification NIN_SELECT . Les versions antérieures envoient des messages WM_RBUTTONDOWN et WM_RBUTTONUP .
  • Si un utilisateur passe le pointeur de la souris sur une icône à laquelle une info-bulle est associée, l’interpréteur de commandes version 6.0 (Windows XP) envoie les messages suivants.
      • NIN_BALLOONSHOW : envoyé lorsque la bulle est affichée (les bulles sont mises en file d’attente).
      • NIN_BALLOONHIDE : envoyé lorsque la bulle disparaît, par exemple, lorsque l’icône est supprimée. Ce message n’est pas envoyé si la bulle est ignorée en raison d’un délai d’attente ou d’un clic de souris.
      • NIN_BALLOONTIMEOUT : envoyé lorsque la bulle est ignorée en raison d’un délai d’expiration.
      • NIN_BALLOONUSERCLICK : envoyé lorsque la bulle est ignorée en raison d’un clic de souris.

Vous pouvez sélectionner le comportement de l’interpréteur de commandes en appelant Shell_NotifyIcon avec dwMessage défini sur NIM_SETVERSION. Définissez le membre uVersion de la structure NOTIFYICONDATA pour indiquer si vous souhaitez un comportement version 5.0 ou pré-version 5.0.

Notification de création de la barre des tâches

Avec Microsoft Internet Explorer 4.0 et versions ultérieures, l’interpréteur de commandes avertit les applications que la barre des tâches a été créée. Lorsque la barre des tâches est créée, elle inscrit un message avec la chaîne TaskbarCreated, puis diffuse ce message dans toutes les fenêtres de niveau supérieur. Lorsque votre application de barre des tâches reçoit ce message, elle doit supposer que toutes les icônes de barre des tâches qu’elle a ajoutées ont été supprimées et les ajouter à nouveau. Cette fonctionnalité s’applique généralement uniquement aux services qui sont déjà en cours d’exécution lors du lancement de l’interpréteur de commandes. L’exemple suivant montre une méthode très simplifiée pour gérer ce cas.

Sur Windows 10, la barre des tâches diffuse également ce message lorsque le DPI de l’affichage principal change.

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

Utilisation de la barre des tâches

Cette section comprend des exemples qui montrent comment ajouter des icônes à la zone de notification de la barre des tâches et comment traiter les messages de rappel pour les icônes de la barre des tâches.

Ajout et suppression d’icônes de barre des tâches dans la zone de notification

Vous ajoutez une icône à la zone de notification de la barre des tâches en remplissant une structure NOTIFYICONDATA , puis en transmettant la structure à Shell_NotifyIcon avec dwMessage défini sur NIM_ADD. Les membres de la structure doivent spécifier le handle à la fenêtre qui ajoute l’icône, ainsi que l’identificateur d’icône et le handle d’icône. Vous pouvez également spécifier le texte d’info-bulle pour l’icône. Si vous devez recevoir des messages de souris pour l’icône, spécifiez l’identificateur du message de rappel que le système doit utiliser pour envoyer le message à la procédure de fenêtre.

La fonction de l’exemple suivant montre comment ajouter une icône à la barre des tâches.

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

Pour supprimer une icône de la zone de notification de la barre des tâches, remplissez une structure NOTIFYICONDATA et appelez Shell_NotifyIcon avec dwMessage défini sur NIM_DELETE. Lors de la suppression d’une icône de barre des tâches, spécifiez uniquement les membres cbSize, hWnd et uID de la structure. Exemple :

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

Réception d’événements de souris

Si vous spécifiez un message de rappel pour une icône de barre des tâches, le système envoie le message à votre application chaque fois qu’un événement de souris se produit dans le rectangle englobant de l’icône. Le paramètre wParam du message spécifie l’identificateur de l’icône de barre des tâches, et le paramètre lParam du message spécifie le message généré par le système à la suite de l’événement de souris.

La fonction de l’exemple suivant provient d’une application qui ajoute des icônes de batterie et d’imprimante à la barre des tâches. L’application appelle la fonction lorsqu’elle reçoit un message de rappel. La fonction détermine si l’utilisateur a cliqué sur l’une des icônes et, en cas de clic, appelle une fonction définie par l’application pour afficher status informations.

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