Taskleiste

Die Windows-Benutzeroberfläche enthält eine spezielle Desktopsymbolleiste der Anwendung , die als Taskleiste bezeichnet wird. 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, die ab Windows 7 an der Taskleiste vorgenommen wurden, finden Sie unter Taskleistenerweiterungen.

 

Dieses Thema enthält folgende Abschnitte:

Informationen zur Taskleiste

Die Taskleiste enthält Folgendes:

  • Startmenü
  • Schnellstartleiste (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. Diese Befehle umfassen Alle Programme, Dokumente, Systemsteuerung, Spiele, Hilfe und Support, Herunterfahren und Suchen von Programmen und Dateien.

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

Die Schnellstartleiste, die in Früheren Versionen von Windows als Windows 7 verfügbar ist, enthält Verknüpfungen zu Anwendungen. Windows stellt Standardeinträge bereit, z. B. Windows Internet Explorer, und der Benutzer kann beliebige weitere Verknüpfungen hinzufügen, die er auswählt. Symbole in diesem Bereich reagieren auf einen einzigen Klick. In Windows 7 und höher ist diese Funktionalität in den Taskleistenschaltflächen enthalten.

Die Shell platziert eine Schaltfläche auf der Taskleiste, wenn eine Anwendung ein nicht eigenständiges Fenster erstellt, d. h. ein Fenster, das kein übergeordnetes Element aufweist und die entsprechenden erweiterten Stilbits aufweist (siehe Verwalten von Taskleistenschaltflächen unten). Um zu einem Fenster zu wechseln, klickt der Benutzer auf seine Fensterschaltfläche. Diese Funktionalität wurde ab Windows 7 erheblich erweitert. Weitere Informationen finden Sie unter Taskleistenerweiterungen.

Anwendungen können Symbole im Infobereich platzieren, um die status eines Vorgangs anzugeben oder den Benutzer über ein Ereignis zu benachrichtigen. Beispielsweise könnte eine Anwendung ein Druckersymbol im Infobereich platzieren, um anzuzeigen, dass ein Druckauftrag ausgeführt wird. In Windows 7 und höher sollten jedoch einige der zuvor im Infobereich bereitgestellten Informationen über die Taskleistenschaltfläche einer Anwendung bereitgestellt werden. Der Infobereich befindet sich am rechten Rand der Taskleiste (wenn die Taskleiste horizontal ist) oder unten (wenn die Taskleiste vertikal ist). Weitere Informationen finden Sie unter Benachrichtigungen und im Infobereich.

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

  • Windows 7 und höher: Die Dropdownliste Uhr auf der Seite Systemsymbole aktivieren oder deaktivieren der Anwendung "Benachrichtigungsbereichssymbole Systemsteuerung" (zugriff auch über die Eigenschaften des Infobereichs).
  • Windows Vista: Das Kontrollkästchen Uhr auf der Seite Infobereich 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, zum Stapeln von Fenstern, zum Parallelstellen von Fenstern, zum Anzeigen des Desktops, zum Starten des Task-Managers und zum Festlegen von Taskleisteneigenschaften. Das Kontextmenü bietet auch die Option zum Hinzufügen oder Entfernen einer Reihe von Symbolleisten aus 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 ab Windows 7 die Taskleiste und der Benachrichtigungsbereich über separate Kontextmenüs verfügen. Diese Kontextmenüs verwenden einige Optionen, z. B. die Fensteranordnung, und fügen andere hinzu.

Anzeigeoptionen für die Taskleiste

Die Taskleiste unterstützt zwei Anzeigeoptionen: Auto-Hide 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). Um diese Optionen festzulegen, 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 ausblenden aktivieren oder deaktivieren. Verwenden Sie die Meldung ABM_GETSTATE , um den Status dieser Anzeigeoptionen abzurufen. Wenn Sie benachrichtigt werden möchten, wenn sich der Status dieser Anzeigeoptionen ändert, verarbeiten Sie die ABN_STATECHANGE Benachrichtigung in Ihrer Fensterprozedur. Verwenden Sie die Meldung ABM_SETSTATE , um den Status dieser Anzeigeoptionen zu ändern.

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 festgelegtem SPI_GETWORKAREA Wert auf. Um die Rechteckkoordinaten abzurufen, die die Position der Taskleiste beschreiben, verwenden Sie die ABM_GETTASKBARPOS Meldung.

Es ist möglich, die Taskleiste abzudecken, indem Sie die Größe des Fensterrechtecks explizit auf die Größe des Bildschirms mit SetWindowPos festlegen. Bei Windows 2000-Systemen oder höher muss dem Fenster entweder WS_CAPTION oder WS_THICKFRAME fehlen, andernfalls muss das Fenster so angepasst werden, dass der Clientbereich den gesamten Bildschirm abdeckt. Wenn die Taskleiste auf Always On Top festgelegt ist, bleibt sie auch für diese Systeme nur ausgeblendet, während die Anwendung die Vordergrundanwendung ist.

Hinzufügen von Tastenkombinationen 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 Shelllinklink.
  2. Rufen Sie die PIDL des Ordners Programme mithilfe von SHGetSpecialFolderLocation ab, und übergeben Sie CSIDL_PROGRAMS.
  3. Fügen Sie den Shelllink 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 immer dann eine Schaltfläche auf der Taskleiste, wenn eine Anwendung ein Fenster erstellt, das nicht im Besitz ist. Um sicherzustellen, dass die Fensterschaltfläche auf der Taskleiste platziert wird, erstellen Sie ein nicht eigenständiges Fenster mit dem WS_EX_APPWINDOW erweiterten Stil. Um zu verhindern, dass die Fensterschaltfläche auf der Taskleiste platziert wird, erstellen Sie das nicht zugeordnete Fenster mit dem WS_EX_TOOLWINDOW erweiterten Stil. Alternativ können Sie ein ausgeblendetes Fenster erstellen und dieses ausgeblendete Fenster zum Besitzer ihres sichtbaren Fensters machen.

Die Shell entfernt die Schaltfläche eines Fensters nur dann aus der Taskleiste, wenn das Format des Fensters sichtbare Taskleistenschaltflächen unterstützt. Wenn Sie das Format eines Fensters dynamisch in ein Format ändern möchten, das keine sichtbaren Taskleistenschaltflächen unterstützt, müssen Sie zuerst das Fenster ausblenden (indem Sie ShowWindow mit SW_HIDE aufrufen), die Fensterformatvorlage ä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 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 fügt die Funktion zum Ändern des Inhalts der Taskleiste hinzu. In einer Anwendung können Sie jetzt Taskleistenschaltflächen hinzufügen, entfernen und aktivieren. Wenn Sie das Element aktivieren, wird das Fenster nicht aktiviert. Das Element wird auf der Taskleiste gedrückt angezeigt.

Die Taskleistenänderungsfunktionen werden in einem COM-Objekt (Component Object Model) (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. Anschließend können Sie die Methoden der ITaskbarList-Schnittstelle verwenden, um den Inhalt der Taskleiste zu ändern.

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

Verwenden Sie die funktion Shell_NotifyIcon , um Symbole aus dem Infobereich hinzuzufügen, zu ändern oder zu löschen. Der dwMessage-Parameter von Shell_NotifyIcon ist eine Meldung an die Taskleiste, die die auszuführende Aktion angibt. Der Parameter pnid ist ein Zeiger auf eine NOTIFYICONDATA-Struktur , die verwendet wird, um das Symbol zu identifizieren und alle zusätzlichen Informationen zu übergeben, die für die Verarbeitung der Nachricht vom System benötigt werden.

Sie können die folgenden Aktionen mit Symbolen im Infobereich ausführen.

  • Um dem Infobereich der Taskleiste ein Symbol hinzuzufügen, rufen Sie Shell_NotifyIcon auf, wobei der dwMessage-Parameter auf NIM_ADD festgelegt ist. Die NOTIFYICONDATA-Struktur wird verwendet, um das Handle und den Bezeichner des Symbols sowie alle QuickInfo-Text anzugeben. Wenn der Benutzer das Kontrollkästchen Uhr anzeigen in den Taskleisteneigenschaften aktiviert hat, platziert das System das Symbol direkt links von der Uhr. Andernfalls wird das Symbol rechts oder unten auf der Taskleiste angezeigt. Alle vorhandenen Symbole werden nach links verschoben, um Platz für das neue Symbol zu schaffen.
  • Um die Informationen eines Symbols zu ändern, einschließlich des Symbolhandles, quickInfo-Texts und Rückrufnachrichtenbezeichners, rufen Sie Shell_NotifyIcon auf, wobei dwMessage auf NIM_MODIFY festgelegt ist.
  • Um ein Symbol aus dem Infobereich zu löschen, rufen Sie Shell_NotifyIcon auf, wobei der dwMessage-Parameter auf NIM_DELETE festgelegt ist.

Wenn Sie einen Benutzeroberflächenvorgang abgeschlossen haben, kehren Sie den Fokus auf den Infobereich zurück, indem Sie Shell_NotifyIcon aufrufen, wobei 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ückrufnachrichten im Infobereich

Anwendungen platzieren häufig Symbole im Infobereich der Taskleiste, um als status Indikatoren zu dienen. Sie können zusätzliche Informationen angeben, wenn der Benutzer Mausaktionen ausführt, z. B. den Mauszeiger über das Symbol bewegen oder auf das Symbol klicken.

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

Sie definieren die Rückrufnachricht eines Symbols, wenn Sie das Symbol der 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-Element 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 Tastaturnachricht, die dem Ereignis zugeordnet ist. Wenn der Mauszeiger beispielsweise auf ein Taskleistensymbol verschoben wird, enthält lParamWM_MOUSEMOVE.

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

  • Wenn der Benutzer den Mauszeiger über das Symbol bewegt, zeigt das System den quickinfo-Text an, der in NOTIFYICONDATA angegeben wurde.
  • Wenn der Benutzer auf das Symbol klickt, erhält Ihre Anwendung eine WM_LBUTTONDOWN Benachrichtigung.
  • Wenn der Benutzer mit der rechten Maustaste auf das Symbol klickt, erhält Ihre Anwendung eine WM_RBUTTONDOWN Benachrichtigung.
  • Wenn der Benutzer auf das Symbol doppelklicken, erhält Ihre Anwendung eine WM_LBUTTONDBLCLK Benachrichtigung.

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

Ein Beispiel zum Ändern des QuickInfotexts, der einem Infobereichssymbol zugeordnet ist, finden Sie unter QuickInfos für Statusleistensymbole.

Versionen 5.0 und höher der Shell behandeln Shell_NotifyIcon Maus- und Tastaturereignisse auf unterschiedliche Weise als frühere Shell-Versionen 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 anfordert, sendet die Shell der Version 5.0 an die zugeordnete Anwendung eine WM_CONTEXTMENU Nachricht. Frühere Versionen senden WM_RBUTTONDOWN und WM_RBUTTONUP Nachrichten.
  • Wenn ein Benutzer ein Benachrichtigungssymbol mit der Tastatur auswählt und es mit der Leertaste oder eingabetaste aktiviert, sendet die Shell der Version 5.0 an die zugeordnete Anwendung eine NIN_KEYSELECT Benachrichtigung. 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 an die zugeordnete Anwendung eine NIN_SELECT Benachrichtigung. Frühere Versionen senden WM_RBUTTONDOWN und WM_RBUTTONUP Nachrichten.
  • Wenn ein Benutzer den Mauszeiger über ein Symbol übergibt, dem eine QuickInfo für eine Sprechblase zugeordnet ist, sendet die Shell version 6.0 (Windows XP) die folgenden Meldungen.
      • NIN_BALLOONSHOW : Wird gesendet, wenn die Sprechblase angezeigt wird (Sprechblasen werden in die Warteschlange eingereiht).
      • NIN_BALLOONHIDE : Wird gesendet, wenn die Sprechblase nicht mehr vorhanden ist, z. B. wenn das Symbol gelöscht wird. Diese Nachricht wird nicht gesendet, wenn die Sprechblase aufgrund eines Timeouts oder eines Mausklicks geschlossen wird.
      • NIN_BALLOONTIMEOUT : Wird gesendet, wenn die Sprechblase aufgrund eines Timeouts geschlossen wird.
      • NIN_BALLOONUSERCLICK : Wird gesendet, wenn die Sprechblase aufgrund eines Mausklicks geschlossen wird.

Sie können auswählen, wie sich die Shell verhalten soll, indem Sie Shell_NotifyIcon aufrufen, wobei 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 verwenden möchten.

Taskleistenerstellungsbenachrichtigung

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 bei der TaskbarCreated-Zeichenfolge und sendet 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 für die Behandlung dieses Falls.

Auf Windows 10 sendet die Taskleiste diese Meldung auch, wenn sich der DPI-Wert 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 das Hinzufügen von Symbolen zum Infobereich der Taskleiste und die Verarbeitung von Rückrufnachrichten für Taskleistensymbole veranschaulichen.

Hinzufügen und Löschen von Taskleistensymbolen im Infobereich

Sie fügen dem Infobereich der Taskleiste ein Symbol hinzu, indem Sie eine NOTIFYICONDATA-Struktur ausfüllen und dann die Struktur an Shell_NotifyIcon übergeben, wobei dwMessage auf NIM_ADD festgelegt ist. Die Strukturmember müssen das Handle für das Fenster, in dem das Symbol hinzugefügt wird, sowie den Symbolbezeichner und das Symbolhandle 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 verwenden soll, um die Nachricht an die Fensterprozedur zu senden.

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 Infobereich der Taskleiste zu löschen, füllen Sie eine NOTIFYICONDATA-Struktur aus, und rufen Sie Shell_NotifyIcon auf, wobei dwMessage auf NIM_DELETE festgelegt ist. Geben Sie beim Löschen eines Taskleistensymbols nur die Elemente 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ückrufnachricht für ein Taskleistensymbol angeben, sendet das System die Nachricht an Ihre Anwendung, wenn im umgebenden Rechteck des Symbols ein Mausereignis auftritt. Der wParam-Parameter der Nachricht gibt den Bezeichner des Taskleistensymbols an, und der lParam-Parameter der Nachricht gibt die Nachricht an, die das System als Ergebnis des Mausereignisses generiert hat.

Die Funktion im folgenden Beispiel stammt aus einer 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 bei einem Klick eine anwendungsdefinierte Funktion auf, um status Informationen 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; 
 }