Taskleiste

Die Windows-Schnittstelle enthält eine spezielle Anwendungsdesktopsymbolleiste namens Taskleiste. Sie können die Taskleiste für Aufgaben wie das Wechseln zwischen geöffneten Fenstern und das Starten neuer Anwendungen verwenden.

Hinweis

Informationen zu Änderungen an der Taskleiste ab Windows 7 finden Sie unter Taskleistenerweiterungen.

Dieses Thema enthält folgende Abschnitte:

Informationen zur Taskleiste

Die Taskleiste enthält Folgendes:

  • Startmenü
  • Schnellstart (nur Windows Vista und früher)
  • Taskleistenschaltflächen
  • Symbolleisten (optional)
  • Benachrichtigungsbereich

Das Startmenü enthält Befehle, die auf Programme, Dokumente und Einstellungen zugreifen können. Zu diesen Befehlen gehören Alle Programme , Dokumente, Systemsteuerung, Spiele, Hilfe und Support, Herunterfahren und Suchprogramme und Dateien.

Der Start in früheren Versionen von Windows Elemente wie Suchen und Ausführen enthalten, deren Funktionalität in Search-Programmen und -Dateien in Windows Vista und höher enthalten war.

Die Schnellstart, die in Versionen vor Windows 7 Windows verfügbar ist, enthält Verknüpfungen zu Anwendungen. Windows stellt Standardeinträge wie Windows Internet Explorer zur Auswahl, und der Benutzer kann weitere Tastenkombinationen hinzufügen. Symbole in diesem Bereich reagieren auf einen einzigen Klick. In Windows 7 und höher ist diese Funktion in den Taskleistenschaltflächen enthalten.

Die Shell platziert eine Schaltfläche auf der Taskleiste, wenn eine Anwendung ein nicht geöffnetes Fenster erstellt, d. h. ein Fenster, das kein übergeordnetes Element hat und über die entsprechenden erweiterten Stilbits verfügt (siehe Verwaltenvon Taskleistenschaltflächen weiter unten). Um zu einem Fenster zu wechseln, klickt der Benutzer auf die Fensterschaltfläche. Diese Funktionalität wurde ab 7 Windows erweitert. Weitere Informationen finden Sie unter Taskleistenerweiterungen.

Anwendungen können Symbole in den Benachrichtigungsbereich stellen, um den Status eines Vorgangs anzuzeigen oder den Benutzer über ein Ereignis zu benachrichtigen. Beispielsweise könnte eine Anwendung ein Druckersymbol in den Benachrichtigungsbereich stellen, um anzuzeigen, dass ein Druckauftrag in Arbeit ist. Allerdings sollten in Windows 7 und höher einige der informationen, die zuvor vom Infobereich bereitgestellt wurden, über die Taskleistenschaltfläche einer Anwendung bereitgestellt werden. Der Benachrichtigungsbereich befindet sich am rechten Rand der Taskleiste (wenn die Taskleiste horizontal ist) oder am unteren Rand (wenn die Taskleiste vertikal ist). Weitere Informationen finden Sie unter Benachrichtigungen und im Infobereich.

Im Benachrichtigungsbereich wird auch die aktuelle Uhrzeit angezeigt, wenn diese Option ausgewählt ist. Die Option wird wie die folgenden gefunden:

  • Windows 7 und höher: Die Dropdownliste Uhr auf der Seite Systemsymbole aktivieren oder deaktivieren der Anwendung Benachrichtigungsbereichssymbole Systemsteuerung (auch über die Eigenschaften des Benachrichtigungsbereichs zugänglich).
  • Windows Vista: Das Kontrollkästchen Uhr auf der Seite Benachrichtigungsbereich des Eigenschaftenfensters Taskleiste und Startmenü.
  • Windows XP: Das Kontrollkästchen Uhr anzeigen im Eigenschaftenfenster Taskleiste und Startmenü.

Der Benutzer kann mit der rechten Maustaste auf die Taskleiste klicken, um das Kontextmenü anzuzeigen. Das Kontextmenü enthält Befehle zum Kaskadieren von Fenstern, Stapelfenstern, anzeigen von Fenstern nebeneinander, Anzeigen des Desktops, Starten Task-Manager und Festlegen von Taskleisteneigenschaften. Das Kontextmenü bietet auch die Option zum Hinzufügen oder Entfernen einer Gruppe von Symbolleisten auf der Taskleiste. Sie können diesem Menü neue Symbolleisten hinzufügen, indem Sie sie unter der Kategorie CATID _ DeskBand registrieren. Weitere Informationen finden Sie unter Implementieren von Bandobjekten. Beachten Sie, dass Windows 7 die Taskleiste und der Benachrichtigungsbereich über separate Kontextmenüs verfügen. Diese Kontextmenüs teilen sich einige Optionen, z. B. die Fensteranordnung, und fügen andere hinzu.

Optionen für die Taskleistenanzeige

Die Taskleiste unterstützt zwei Anzeigeoptionen: Automatisches Ausblenden und nur in Windows Vista und früher Always On Top (die Taskleiste befindet sich in Windows 7 und höher immer in diesem Modus). Zum Festlegen dieser Optionen muss der Benutzer das Kontextmenü der Taskleiste öffnen, auf Eigenschaften klicken und das Kontrollkästchen Taskleiste automatisch ausblenden oder das Kontrollkästchen Taskleiste über anderen Fenstern behalten aktivieren oder löschen. Verwenden Sie die ABM _ GETSTATE-Meldung, um den Status dieser Anzeigeoptionen abzurufen. Wenn Sie benachrichtigt werden möchten, wenn sich der Status dieser Anzeigeoptionen ändert, verarbeiten Sie die ABN STATECHANGE-Benachrichtigungsmeldung _ in Ihrer Fensterprozedur. Um den Status dieser Anzeigeoptionen zu ändern, verwenden Sie die ABM _ SETSTATE-Meldung.

Der Arbeitsbereich ist der Teil des Bildschirms, der nicht von der Taskleiste verdeckt wird. Um die Größe des Arbeitsbereichs abzurufen, rufen Sie die SystemParametersInfo-Funktion mit dem festgelegten SPI _ GETWORKAREA-Wert auf. Um die Rechteckkoordinaten abzurufen, die die Position der Taskleiste beschreiben, verwenden Sie die ABM _ GETTASKBARPOS-Nachricht.

Sie können die Taskleiste abdecken, indem Sie die Größe des Fensterrechtecks mit SetWindowPos explizitauf die Größe des Bildschirms festlegen. Bei Windows 2000-Systemen oder höher muss im Fenster entweder WS _ CAPTION oder WS _ THICKFRAMEfehlen, oder das Fenster muss so dimensioniert werden, dass der Clientbereich den gesamten Bildschirm abdeckt. Auch für diese Systeme gilt Folgendes: Wenn die Taskleiste auf Always On Top festgelegt ist, bleibt sie nur ausgeblendet, während die Anwendung die Vordergrundanwendung ist.

Hinzufügen von Verknüpfungen zum Startmenü

Führen Sie die folgenden Schritte aus, um dem Untermenü Programme unter Microsoft Windows NT 4.0, Windows 2000 und höher oder Windows 95 oder höher ein Element hinzuzufügen.

  1. Erstellen Sie mithilfe der IShellLink-Schnittstelle einen Shelllink.
  2. Rufen Sie die PIDL des Ordners Programme ab, indem Sie SHGetSpecialFolderLocationverwenden und CSIDL _ PROGRAMS übergeben.
  3. Fügen Sie den Shell-Link zum Ordner Programme hinzu. Sie können auch einen Ordner im Ordner Programme erstellen und den Link zu diesem Ordner hinzufügen.

Verwalten von Taskleistenschaltflächen

Die Shell erstellt eine Schaltfläche auf der Taskleiste, wenn eine Anwendung ein Fenster erstellt, das nicht im Besitz von ist. Um sicherzustellen, dass die Fensterschaltfläche auf der Taskleiste platziert wird, erstellen Sie ein nicht geöffnetes Fenster mit dem erweiterten Format WS _ EX _ APPWINDOW. Um zu verhindern, dass die Fensterschaltfläche auf der Taskleiste platziert wird, erstellen Sie das nicht geöffnete Fenster mit dem erweiterten Format WS _ EX _ TOOLWINDOW. Alternativ können Sie ein ausgeblendetes Fenster erstellen und dieses ausgeblendete Fenster als Besitzer Des sichtbaren Fensters machen.

Die Shell entfernt die Schaltfläche eines Fensters nur dann von der Taskleiste, wenn der Stil des Fensters sichtbare Taskleistenschaltflächen unterstützt. Wenn Sie den Stil eines Fensters dynamisch in einen Stil ändern möchten, der keine sichtbaren Taskleistenschaltflächen unterstützt, müssen Sie das Fenster zuerst ausblenden (indem Sie ShowWindow mit SW _ HIDE aufrufen), den Fensterstil ändern und dann das Fenster anzeigen.

Die Fensterschaltfläche enthält in der Regel das Anwendungssymbol und den Titel. Wenn die Anwendung jedoch kein Systemmenü enthält, wird die Fensterschaltfläche ohne das Symbol erstellt.

Wenn Ihre Anwendung die Aufmerksamkeit des Benutzers erhalten soll, wenn das Fenster nicht aktiv ist, verwenden Sie die FlashWindow-Funktion, um den Benutzer darüber zu informieren, dass eine Nachricht wartet. Diese Funktion blinkt auf die Fensterschaltfläche. Sobald der Benutzer auf die Fensterschaltfläche klickt, um das Fenster zu aktivieren, kann Ihre Anwendung die Meldung anzeigen.

Ändern des Inhalts der Taskleiste

Version 4.71 und höher von Shell32.dll die Möglichkeit, den Inhalt der Taskleiste zu ändern. In einer Anwendung können Sie jetzt Taskleistenschaltflächen hinzufügen, entfernen und aktivieren. Wenn Sie das Element aktivieren, wird das Fenster nicht aktiviert. Es zeigt das Element an, wie es auf der Taskleiste gedrückt wird.

Die Funktionen zum Ändern der Taskleiste werden in einem Component Object Model-Objekt (CLSID TaskbarList) implementiert, das die _ ITaskbarList-Schnittstelle (IID _ ITaskbarList) verfügbar macht. Sie müssen die ITaskbarList::HrInit-Methode aufrufen, um das -Objekt zu initialisieren. Sie können dann die Methoden der ITaskbarList-Schnittstelle verwenden, um den Inhalt der Taskleiste zu ändern.

Hinzufügen, Ändern und Löschen von Symbolen im Benachrichtigungsbereich

Verwenden Sie die _ Shell-Funktion NotifyIcon, um Symbole im Benachrichtigungsbereich hinzuzufügen, zu ändern oder zu löschen. Der dwMessage-Parameter von Shell _ NotifyIcon ist eine Nachricht an die Taskleiste, die die auszuführende Aktion angibt. Der pnid-Parameter ist ein Zeiger auf eine NOTIFYICONDATA-Struktur, die verwendet wird, um das Symbol zu identifizieren und alle zusätzlichen Informationen zu übergeben, die das System zum Verarbeiten der Nachricht benötigt.

Sie können die folgenden Aktionen mit Symbolen für den Benachrichtigungsbereich ausführen.

  • Um dem Benachrichtigungsbereich der Taskleiste ein Symbol hinzuzufügen, rufen Sie Shell _ NotifyIcon auf, und legen Sie dabei den Parameter dwMessage auf NIM _ ADD fest. Die NOTIFYICONDATA-Struktur wird verwendet, um das Handle und den Bezeichner des Symbols sowie einen beliebigen QuickInfo-Text anzugeben. Wenn der Benutzer das Kontrollkästchen Uhr anzeigen in den Taskleisteneigenschaften aktiviert hat, platziert das System das Symbol direkt links neben der Uhr. Andernfalls wird das Symbol rechts oder unten in der Taskleiste angezeigt. Alle vorhandenen Symbole werden nach links verschoben, um Platz für das neue Symbol zu machen.
  • Rufen Sie Shell _ NotifyIcon mit auf NIM MODIFY festgelegter dwMessage auf, um die Informationen eines Symbols zu ändern, einschließlich des Symbolhandpunkts, des QuickInfo-Texts und des Rückrufnachrichtenbezeichners. _
  • Um ein Symbol aus dem Benachrichtigungsbereich zu löschen, rufen Sie Shell _ NotifyIcon auf, und legen Sie dabei den Parameter dwMessage auf NIM _ DELETE fest.

Wenn Sie einen Benutzeroberflächenvorgang abgeschlossen haben, geben Sie den Fokus auf den Benachrichtigungsbereich zurück, indem Sie Shell _ NotifyIcon aufrufen, bei dem dwMessage auf NIM _ SETFOCUS festgelegt ist. Dies können Sie beispielsweise tun, wenn ein Taskleistensymbol ein Kontextmenü anzeigt, der Benutzer es jedoch durch Drücken der ESCAPE-TASTE abbricht.

Empfangen von Rückrufmeldungen für den Benachrichtigungsbereich

Anwendungen setzen Symbole in der Regel in den Benachrichtigungsbereich der Taskleiste, um als Statusindikatoren zu dienen. Sie können zusätzliche Informationen bereitstellen, wenn der Benutzer Mausaktionen ausführt, z. B. das Bewegen des Mauszeigers über das Symbol oder das Klicken auf das Symbol.

Das System benachrichtigt Sie über Maus- und Tastaturereignisse, indem es eine anwendungsdefinierte Rückrufnachricht sendet, die einem bestimmten Symbol zugeordnet ist. Auf diese Weise kann das System eine Anwendung benachrichtigen, wenn der Benutzer beispielsweise auf das Symbol klickt oder es durch Drücken einer Taste auswählt.

Sie definieren die Rückrufmeldung eines Symbols, wenn Sie das Symbol zur Taskleiste hinzufügen. Der Rückrufnachrichtenbezeichner wird im uCallbackMessage-Member der NOTIFYICONDATA-Struktur angegeben, die mit NIM ADD übergeben _ wird. Wenn ein Ereignis auftritt, sendet das System die Rückrufnachricht an die Fensterprozedur des Fensters, das vom hWnd-Member angegeben wird. Der wParam-Parameter der Nachricht enthält den Bezeichner des Taskleistensymbols, in dem das Ereignis aufgetreten ist. Der lParam-Parameter enthält die Maus- oder Tastaturmeldung, die dem Ereignis zugeordnet ist. Wenn der Mauszeiger beispielsweise auf ein Taskleistensymbol bewegt wird, enthält lParam WM _ MOUSEMOVE.

Die Ergebnisse verschiedener Mausereignisse können wie folgt zusammengefasst werden:

In der Regel bewirkt das Klicken auf das Symbol, dass die Anwendung ein Fenster mit zusätzlichen Informationen anzeigt. Wenn Sie mit der rechten Maustaste darauf klicken, wird ein Kontextmenü angezeigt, und durch Doppelklicken wird der Standardbefehl für das Kontextmenü ausgeführt.

Ein Beispiel zum Ändern des QuickInfo-Texts, der einem Benachrichtigungsbereichssymbol zugeordnet ist, finden Sie unter QuickInfos für Statusleistensymbole.

Versionen 5.0 und höher der Shell behandeln Shell _ NotifyIcon-Maus- und Tastaturereignisse auf andere Weise als frühere Shellversionen unter Windows NT 4.0, Windows 95 und Windows 98. Es gibt die folgenden Unterschiede:

  • Wenn ein Benutzer das Kontextmenü eines Benachrichtigungssymbols mit der Tastatur an fordert, sendet die Shell der Version 5.0 eine WM _ CONTEXTMENU-Nachricht an die zugeordnete Anwendung. Frühere Versionen senden WM _ RBUTTONDOWN- und WM _ RBUTTONUP-Nachrichten.
  • Wenn ein Benutzer ein Benachrichtigungssymbol mit der Tastatur auswählt und es mit der Leerzeichenleiste oder EINGABETASTE aktiviert, sendet die Shell der Version 5.0 eine NIN _ KEYSELECT-Benachrichtigung an die zugeordnete Anwendung. Frühere Versionen senden WM _ RBUTTONDOWN- und WM _ RBUTTONUP-Nachrichten.
  • Wenn ein Benutzer ein Benachrichtigungssymbol mit der Maus auswählt und es mit der EINGABETASTE aktiviert, sendet die Shell der Version 5.0 eine NIN _ SELECT-Benachrichtigung an die zugeordnete Anwendung. Frühere Versionen senden WM _ RBUTTONDOWN- und WM _ RBUTTONUP-Nachrichten.
  • Wenn ein Benutzer den Mauszeiger über ein Symbol übergibt, dem eine Sprechblasen-QuickInfo zugeordnet ist, sendet die Shell der Version 6.0 (Windows XP) die folgenden Meldungen.
      • NIN _ BALLOONSHOW: Wird gesendet, wenn der Sprechblasen angezeigt wird (Sprechblasen werden in die Warteschlange gestellt).
      • NIN _ BALLOONHIDE: Wird gesendet, wenn der Balloon nicht mehr angezeigt wird, z. B. wenn das Symbol gelöscht wird. Diese Meldung wird nicht gesendet, wenn der Balloon aufgrund eines Timeouts oder Mausklicks verworfen wird.
      • NIN _ BALLOONTIMEOUT: Wird gesendet, wenn der Balloon aufgrund eines Timeouts verworfen wird.
      • NIN _ BALLOONUSERCLICK: Wird gesendet, wenn der Balloon aufgrund eines Mausklicks verworfen wird.

Sie können auswählen, wie sich die Shell verhalten soll, indem Sie Shell _ NotifyIcon aufrufen, bei der dwMessage auf NIM _ SETVERSION festgelegt ist. Legen Sie den uVersion-Member der NOTIFYICONDATA-Struktur fest, um anzugeben, ob Sie das Verhalten von Version 5.0 oder Vorversion 5.0 wünschen.

Taskleisten-Erstellungsbenachrichtigung

Mit Microsoft Internet Explorer 4.0 und höher benachrichtigt die Shell Anwendungen, dass die Taskleiste erstellt wurde. Wenn die Taskleiste erstellt wird, registriert sie eine Nachricht mit der TaskbarCreated-Zeichenfolge und überträgt diese Nachricht dann an alle Fenster der obersten Ebene. Wenn Ihre Taskleistenanwendung diese Meldung empfängt, sollte davon ausgegangen werden, dass alle hinzugefügten Taskleistensymbole entfernt und erneut hinzugefügt wurden. Dieses Feature gilt im Allgemeinen nur für Dienste, die bereits ausgeführt werden, wenn die Shell gestartet wird. Das folgende Beispiel zeigt eine sehr vereinfachte Methode zum Behandeln dieses Falls.

Auf Windows 10 wird diese Meldung auch von der Taskleiste übertragen, wenn sich der DPI-Grad der primären Anzeige ändert.

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

Verwenden der Taskleiste

Dieser Abschnitt enthält Beispiele, die veranschaulichen, wie Dem Taskleisten-Benachrichtigungsbereich Symbole hinzugefügt und Rückrufmeldungen für Taskleistensymbole verarbeiten.

Hinzufügen und Löschen von Taskleistensymbolen im Benachrichtigungsbereich

Sie fügen dem Taskleisten-Benachrichtigungsbereich ein Symbol hinzu, indem Sie eine NOTIFYICONDATA-Struktur ausfüllen und die Struktur dann an Shell _ NotifyIcon übergeben, bei der dwMessage auf NIM ADD festgelegt _ ist. Die Strukturmitglieder müssen das Handle für das Fenster, in dem das Symbol hinzugefügt wird, sowie den Symbolbezeichner und das Symbolhand handle angeben. Sie können auch QuickInfo-Text für das Symbol angeben. Wenn Sie Mausnachrichten für das Symbol empfangen müssen, geben Sie den Bezeichner der Rückrufnachricht an, die das System zum Senden der Nachricht an die Fensterprozedur verwenden soll.

Die Funktion im folgenden Beispiel veranschaulicht, wie der Taskleiste ein Symbol hinzugefügt wird.

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

Um ein Symbol aus dem Taskleisten-Benachrichtigungsbereich zu löschen, füllen Sie eine NOTIFYICONDATA-Struktur aus, und rufen Sie Shell _ NotifyIcon auf, und legen Sie dwMessage auf NIM DELETE _ fest. Geben Sie beim Löschen eines Taskleistensymbols nur die Member cbSize, hWnd und uID der Struktur an. Beispiel:

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

Empfangen von Mausereignissen

Wenn Sie eine Rückrufmeldung für ein Taskleistensymbol angeben, sendet das System die Nachricht immer dann an Ihre Anwendung, wenn ein Mausereignis im umgebundenen Rechteck des Symbols auftritt. Der wParam-Parameter der Nachricht gibt den Bezeichner des Taskleistensymbols an, und der lParam-Parameter der Nachricht gibt die Meldung an, die das System als Ergebnis des Mausereignisses generiert hat.

Die Funktion im folgenden Beispiel ist eine Anwendung, die sowohl Akku- als auch Druckersymbole zur Taskleiste hinzufügt. Die Anwendung ruft die Funktion auf, wenn sie eine Rückrufnachricht empfängt. Die Funktion bestimmt, ob der Benutzer auf eines der Symbole geklickt hat, und ruft, wenn ein Klick aufgetreten ist, eine anwendungsdefinierte Funktion auf, um Statusinformationen anzuzeigen.

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