Taskleiste
Die Windows-Schnittstelle enthält eine spezielle Anwendungsdesktopsymbolleiste namens "Taskleiste". Sie können die Taskleiste für solche Aufgaben wie das Wechseln zwischen geöffneten Fenstern und dem 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ü
- 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 von Programmen und Dateien.
Die Start in früheren Versionen von Windows enthalten Elemente wie Find and Run, die Funktionalität, die in Suchprogramme und Dateien in Windows Vista und höher enthalten war.
Die Schnellstartleiste, die in Versionen von Windows früher als Windows 7 verfügbar ist, enthält Verknüpfungen zu Anwendungen. Windows bietet Standardeinträge, z. B. Windows Internet Explorer, und der Benutzer kann alle weiteren Verknüpfungen hinzufügen, die sie auswählen. Symbole in diesem Bereich reagieren auf ein einzelnes Klicken. 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 nichtowniertes Fenster erstellt – das heißt, ein Fenster, das nicht über ein übergeordnetes Fenster verfügt und die die entsprechenden erweiterten Formatvorlagen-Bits aufweist (siehe Verwalten von Taskleistenschaltflächen unten). Um zu einem Fenster zu wechseln, klickt der Benutzer auf seine Fensterschaltfläche. Diese Funktionalität wurde seit Windows 7 stark erweitert. Weitere Informationen finden Sie unter Taskleistenerweiterungen.
Anwendungen können Symbole im Benachrichtigungsbereich platzieren, um den Status eines Vorgangs anzugeben oder den Benutzer über ein Ereignis zu benachrichtigen. Beispielsweise kann eine Anwendung ein Druckersymbol im Benachrichtigungsbereich platzieren, um anzuzeigen, dass ein Druckauftrag auf dem Weg ist. In Windows 7 und höher sollten jedoch einige der zuvor vom Benachrichtigungsbereich bereitgestellten Informationen über die Taskleistenschaltfläche einer Anwendung bereitgestellt werden. Der Benachrichtigungsbereich 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 "Benachrichtigungsbereich".
Der Benachrichtigungsbereich zeigt auch die aktuelle Uhrzeit an, 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 "Benachrichtigungsbereich" Systemsteuerung Anwendung (auch über die Eigenschaften des Benachrichtigungsbereichs zugänglich).
- Windows Vista: Das Kontrollkästchen "Uhr" auf der Seite "Benachrichtigungsbereich" der Eigenschaften "Taskleiste" und "Menüstart".
- Windows XP: Das Kontrollkästchen "Uhr anzeigen" im Eigenschaftenfenster "Taskleiste" und "Menüstart".
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 von Task-Manager und Festlegen von Taskleisteneigenschaften. Das Kontextmenü bietet auch die Möglichkeit, eine Reihe von Symbolleisten aus der Taskleiste hinzuzufügen oder zu entfernen. 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 separate Kontextmenüs haben. Diese Kontextmenüs teilen einige Optionen, z. B. Fensteranordnung, und fügen Sie andere hinzu.
Taskleistenanzeigeoptionen
Die Taskleiste unterstützt zwei Anzeigeoptionen: Automatisches Ausblenden und in Windows Vista und früher nur Always On Top (die Taskleiste befindet sich immer im Modus Windows 7 und höher). Um diese Optionen festzulegen, muss der Benutzer das Kontextmenü der Taskleiste öffnen, auf Eigenschaften klicken und das Kontrollkästchen " Taskleiste automatisch ausblenden " aktivieren oder deaktivieren oder die Taskleiste oben in anderen Fenstern aktivieren. Um den Zustand dieser Anzeigeoptionen abzurufen, verwenden Sie die ABM_GETSTATE Nachricht. Wenn Sie benachrichtigt werden möchten, wenn sich der Zustand dieser Anzeigeoptionen ändert, verarbeiten Sie die ABN_STATECHANGE Benachrichtigungsnachricht in Ihrer Fensterprozedur. Um den Status dieser Anzeigeoptionen zu ändern, verwenden Sie die ABM_SETSTATE Nachricht.
Der Arbeitsbereich ist der Teil des Bildschirms, der von der Taskleiste nicht verdeckt wird. Um die Größe des Arbeitsbereichs abzurufen, rufen Sie die SystemParametersInfo-Funktion mit dem SPI_GETWORKAREA Wertsatz auf. Um die Rechteckkoordinaten abzurufen, die den Speicherort der Taskleiste beschreiben, verwenden Sie die ABM_GETTASKBARPOS Nachricht.
Es ist möglich, die Taskleiste abzudecken, indem sie explizit die Größe des Fensterrechtecks entsprechend der Größe des Bildschirms mit SetWindowPos festlegen. Für Windows 2000-Systeme oder höher muss das Fenster entweder WS_CAPTION oder WS_THICKFRAME fehlen, oder das Fenster muss größe sein, damit der Clientbereich den gesamten Bildschirm abdeckt. Insbesondere für diese Systeme, 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 ein Element zum Untermenü "Programme" in Microsoft Windows NT 4.0, Windows 2000 und höher oder Windows 95 oder höher hinzuzufügen.
- Erstellen Sie einen Shelllink-Link mithilfe der IShellLink-Schnittstelle .
- Rufen Sie die PIDL des Ordners "Programme" mithilfe von SHGetSpecialFolderLocation ab , CSIDL_PROGRAMS übergeben.
- 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 gehört. Um sicherzustellen, dass die Schaltfläche "Fenster" auf der Taskleiste platziert wird, erstellen Sie ein unowniertes Fenster mit dem erweiterten Format WS_EX_APPWINDOW . Um zu verhindern, dass die Fensterschaltfläche auf der Taskleiste platziert wird, erstellen Sie das unownierte Fenster mit dem erweiterten Format WS_EX_TOOLWINDOW . 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 aus der Taskleiste, wenn die Formatvorlage des Fensters sichtbare Taskleistenschaltflächen unterstützt. Wenn Sie die Formatvorlage eines Fensters dynamisch auf eine ändern möchten, die keine sichtbaren Taskleistenschaltflächen unterstützt, müssen Sie das Fenster zuerst ausblenden (indem Sie ShowWindow mit SW_HIDE aufrufen), die Fensterformatvorlage ändern und dann das Fenster anzeigen.
Die Schaltfläche "Fenster" 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 Sie möchten, dass Ihre Anwendung die Aufmerksamkeit des Benutzers erhalten soll, wenn das Fenster nicht aktiv ist, verwenden Sie die FlashWindow-Funktion , um dem Benutzer mitzuteilen, dass eine Nachricht wartet. Diese Funktion blitzt die Fensterschaltfläche. Sobald der Benutzer auf die Fensterschaltfläche klickt, um das Fenster zu aktivieren, kann ihre Anwendung die Nachricht anzeigen.
Ändern des Inhalts der Taskleiste
Version 4.71 und höher von Shell32.dll fügt die Möglichkeit hinzu, den Inhalt der Taskleiste zu ändern. Aus einer Anwendung können Sie nun Taskleistenschaltflächen hinzufügen, entfernen und aktivieren. Das Aktivieren des Elements aktiviert das Fenster nicht; es zeigt das Element wie auf der Taskleiste gedrückt.
Die Taskleistenänderungsfunktionen werden in einem Component Object Model (COM)-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. 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 Benachrichtigungsbereich
Verwenden Sie die Shell_NotifyIcon-Funktion , um Symbole aus dem Benachrichtigungsbereich hinzuzufügen, zu ändern oder zu löschen. Der dwMessage-Parameter von Shell_NotifyIcon ist eine Nachricht an die Taskleiste, die die zu ergreifende 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 für das System zum Verarbeiten der Nachricht benötigt werden.
Sie können die folgenden Aktionen mit Benachrichtigungsbereichssymbolen ausführen.
- Um dem Benachrichtigungsbereich der Taskleiste ein Symbol hinzuzufügen, rufen Sie Shell_NotifyIcon mit dem auf NIM_ADD festgelegten dwMessage-Parameter auf. Die NOTIFYICONDATA-Struktur wird verwendet, um den Handle und den Bezeichner des Symbols und alle QuickInfo-Text anzugeben. Wenn der Benutzer das Kontrollkästchen "Uhr anzeigen " in den Taskleisteneigenschaften ausgewählt hat, platziert das System das Symbol direkt links neben der Uhr. Andernfalls wird das Symbol auf der rechten Seite oder am unteren Rand der Taskleiste angezeigt. Alle vorhandenen Symbole werden links verschoben, um Platz für das neue Symbol zu schaffen.
- Um die Informationen eines Symbols zu ändern, einschließlich des Symbolhandpunkts, der QuickInfo-Text und der Rückrufnachrichtenbezeichner, rufen Sie Shell_NotifyIcon mit dwMessage auf NIM_MODIFY.
- Um ein Symbol aus dem Benachrichtigungsbereich zu löschen, rufen Sie Shell_NotifyIcon mit dem auf NIM_DELETE festgelegten dwMessage-Parameter auf.
Wenn Sie einen Benutzeroberflächenvorgang abgeschlossen haben, kehren Sie den Fokus auf den Benachrichtigungsbereich zurück, indem Sie Shell_NotifyIcon mitdwMessage aufrufen, die auf NIM_SETFOCUS festgelegt ist. Beispielsweise können Sie dies tun, wenn ein Taskleistensymbol ein Kontextmenü anzeigt, der Benutzer es jedoch abbricht, indem er die ESCAPE-TASTE drückt.
Empfangen von Rückrufnachrichten im Benachrichtigungsbereich
Anwendungen platzieren häufig Symbole im Benachrichtigungsbereich der Taskleiste, um als Statusindikatoren zu dienen. Sie können zusätzliche Informationen bereitstellen, wenn der Benutzer Mausaktionen ausführt, z. B. den Mauszeiger über das Symbol verschieben oder auf das Symbol klicken.
Das System benachrichtigt Sie von Maus- und Tastaturereignissen, indem Sie eine anwendungsdefinierte Rückrufnachricht senden, die einem bestimmten Symbol zugeordnet ist. Auf diese Weise kann das System eine Anwendung benachrichtigen, wenn der Benutzer beispielsweise auf das Symbol klickt oder durch Drücken einer TASTE auswählt.
Sie definieren die Rückrufnachricht eines Symbols, wenn Sie dem Taskleiste das Symbol hinzufügen. Der Rückrufnachrichtenbezeichner wird im UCallbackMessage-Element der mit NIM_ADD übergebenen NOTIFYICONDATA-Struktur angegeben. 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 verschiebt, zeigt das System den Toolinfotext 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, mit der rechten Maustaste ein Kontextmenü angezeigt wird, und das Doppelklicken führt den Standardmenübefehl aus.
Ein Beispiel zum Ändern des QuickInfo-Texts, der einem Benachrichtigungsbereichsymbol zugeordnet ist, finden Sie unter " QuickInfos" für Statusleistensymbole.
Versionen 5.0 und höher der Shell behandeln Shell_NotifyIcon Maus- und Tastaturereignisse auf verschiedene Weise als frühere Shell-Versionen, die auf Windows NT 4.0, Windows 95 und Windows 98 gefunden wurden. Es gibt die folgenden Unterschiede:
- Wenn ein Benutzer das Kontextmenü eines Benachrichtigungssymbols mit der Tastatur anfordert, sendet die Version 5.0-Shell die zugeordnete Anwendung an 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 Version 5.0 Shell die zugeordnete Anwendung an 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 Version 5.0-Shell die zugeordnete Anwendung an eine NIN_SELECT Benachrichtigung. Frühere Versionen senden WM_RBUTTONDOWN und WM_RBUTTONUP Nachrichten.
- Wenn ein Benutzer den Mauszeiger über ein Symbol übergibt, mit dem eine Sprechblaseninfo zugeordnet ist, sendet die Version 6.0-Shell (Windows XP)die folgenden Nachrichten.
-
- NIN_BALLOONSHOW – Gesendet, wenn die Sprechblase angezeigt wird (Warteschlange).
- NIN_BALLOONHIDE – Gesendet, wenn der Sprechblasen verschwindet – z. B. wenn das Symbol gelöscht wird. Diese Nachricht wird nicht gesendet, wenn der Sprechblasen aufgrund eines Timeouts oder eines Mausklicks geschlossen wird.
- NIN_BALLOONTIMEOUT – Gesendet, wenn der Sprechblasen aufgrund eines Timeouts geschlossen wird.
- NIN_BALLOONUSERCLICK – Gesendet, wenn der Sprechblasen aufgrund eines Mausklicks geschlossen wird.
-
Sie können auswählen, wie sich die Shell verhalten sollte, indem Sie Shell_NotifyIcon mitdwMessage aufrufen, die auf NIM_SETVERSION festgelegt ist. Legen Sie das uVersion-Element der NOTIFYICONDATA-Struktur fest, um anzugeben, ob Sie Version 5.0 oder Vorabversion 5.0 verhalten möchten.
Taskleistenerstellungsbenachrichtigung
Mit Microsoft Internet Explorer 4.0 und höher benachrichtigt die Shell Anwendungen, die die Taskleiste erstellt wurde. Wenn die Taskleiste erstellt wird, registriert sie eine Nachricht mit der TaskbarCreated-Zeichenfolge und sendet diese Nachricht dann in alle Fenster auf oberster Ebene. Wenn Ihre Taskleistenanwendung diese Nachricht empfängt, sollte davon ausgegangen werden, dass alle Taskleistensymbole entfernt wurden, die sie hinzugefügt haben, und sie erneut hinzufügen. Dieses Feature gilt im Allgemeinen nur für Dienste, die bereits ausgeführt werden, wenn die Shell gestartet wird. Im folgenden Beispiel wird eine sehr vereinfachte Methode zum Behandeln dieses Falls gezeigt.
Auf Windows 10 sendet die Taskleiste diese Nachricht auch, wenn sich die DPI 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
In diesem Abschnitt finden Sie Beispiele zum Hinzufügen von Symbolen zum Taskleistenbenachrichtigungsbereich und zum Verarbeiten von Rückrufnachrichten für Taskleistensymbole.
Hinzufügen und Löschen von Taskleistensymbolen im Benachrichtigungsbereich
Sie fügen dem Taskleistenbenachrichtigungsbereich ein Symbol hinzu, indem Sie eine NOTIFICATIONICONDATA-Struktur ausfüllen und dann die Struktur an Shell_NotifyIconübergeben, die auf NIM_ADD festgelegt ist. Die Strukturelemente müssen den Handle für das Fenster angeben, das das Symbol hinzufügt, sowie den Symbolbezeichner und den Symbolhandpunkt. 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, mit der das System die Nachricht an die Fensterprozedur senden sollte.
Die Funktion im folgenden Beispiel veranschaulicht, wie Sie der Taskleiste ein Symbol hinzufügen.
// 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 Taskleistenbenachrichtigungsbereich zu löschen, füllen Sie eine NOTIFICATIONICONDATA-Struktur aus, und rufen Sie Shell_NotifyIcon mit dwMessage auf NIM_DELETE fest. Geben Sie beim Löschen eines Taskleistensymbols nur die cbSize-, hWnd- und uID-Elemente der Struktur an. Zum 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 ein Mausereignis im gebundenen Rechteck des Symbols 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 aufgrund des Mausereigniss 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 ein Symbol geklickt hat und wenn ein Klick aufgetreten ist, eine anwendungsdefinierte Funktion aufruft, 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;
}