Benachrichtigungen und der Benachrichtigungsbereich

Der Benachrichtigungsbereich ist ein Teil der Taskleiste, der eine temporäre Quelle für Benachrichtigungen und status bereitstellt. Es kann auch verwendet werden, um Symbole für System- und Programmfeatures anzuzeigen, die auf dem Desktop nicht vorhanden sind, z. B. Akkustand, Lautstärkeregelung und Netzwerk-status. Der Benachrichtigungsbereich wurde in der Vergangenheit als Taskleiste oder status Bereich bezeichnet.

Dieses Thema enthält folgende Abschnitte:

Richtlinien für den Benachrichtigungs- und Benachrichtigungsbereich

In den Abschnitten Benachrichtigungen und Benachrichtigungsbereich der Richtlinien für die Interaktion mit der Windows-Benutzeroberfläche finden Sie bewährte Methoden für die Verwendung von Benachrichtigungen und den Benachrichtigungsbereich. Das Ziel besteht darin, den Benutzernutzen durch eine angemessene Verwendung von Benachrichtigungen zu bieten, ohne lästig oder ablenkend zu sein.

Der Benachrichtigungsbereich dient nicht für wichtige Informationen, auf die sofort reagiert werden muss. Es ist auch nicht für den schnellen Programm- oder Befehlszugriff vorgesehen. Ab Windows 7 kann ein Großteil dieser Funktionalität am besten über die Taskleistenschaltfläche einer Anwendung erreicht werden.

Windows 7 ermöglicht es einem Benutzer, alle Benachrichtigungen von einer Anwendung zu unterdrücken, wenn er dies wählt, sodass ein durchdachter Benachrichtigungsentwurf und die Verwendung dazu führen, dass der Benutzer die Anwendung weiterhin anzeigen kann. Benachrichtigungen sind eine Unterbrechung. stellen Sie sicher, dass sie sich lohnen.

Windows 7 führt das Konzept der "ruhigen Zeit" ein. Die Ruhezeit wird als die erste Stunde definiert, nachdem sich ein neuer Benutzer entweder zum ersten Mal oder zum ersten Mal nach einem Betriebssystemupgrade oder sauber Installation bei seinem Konto angemeldet hat. Diese Zeit ist vorgesehen, damit der Benutzer die neue Umgebung erkunden und sich mit der neuen Umgebung vertraut machen kann, ohne dass Benachrichtigungen ablenken. Während dieser Zeit sollten die meisten Benachrichtigungen nicht gesendet oder angezeigt werden. Ausnahmen sind Feedback, das der Benutzer als Reaktion auf eine Benutzeraktion erwarten würde, z. B. wenn er ein USB-Gerät anschließt oder ein Dokument druckt. API-Spezifik zur ruhen Zeit werden weiter unten in diesem Thema erläutert.

Erstellen und Anzeigen einer Benachrichtigung

In den restlichen Abschnitten in diesem Thema werden die grundlegenden Verfahren beschrieben, die zum Anzeigen einer Benachrichtigung ihrer Anwendung für den Benutzer ausgeführt werden müssen.

  1. Hinzufügen eines Benachrichtigungssymbols
  2. Definieren der NOTIFYICONDATA-Version
  3. Definieren des Benachrichtigungslooks und -inhalts
  4. Überprüfen des Benutzerstatus
  5. Anzeigen der Benachrichtigung
  6. Entfernen eines Symbols

Hinzufügen eines Benachrichtigungssymbols

Zum Anzeigen einer Benachrichtigung müssen Sie über ein Symbol im Benachrichtigungsbereich verfügen. In bestimmten Fällen, z. B. Microsoft Communicator oder Akkustand, ist dieses Symbol bereits vorhanden. In vielen anderen Fällen fügen Sie dem Benachrichtigungsbereich ein Symbol jedoch nur so lange hinzu, wie es zum Anzeigen der Benachrichtigung erforderlich ist. In beiden Fällen wird dies mithilfe der Shell_NotifyIcon-Funktion erreicht. Shell_NotifyIcon können Sie ein Symbol im Infobereich hinzufügen, ändern oder löschen.

Infobereich mit drei Symbolen

Wenn dem Infobereich unter Windows 7 ein Symbol hinzugefügt wird, wird es standardmäßig dem Überlaufabschnitt des Benachrichtigungsbereichs hinzugefügt. Dieser Bereich enthält Symbole für den Benachrichtigungsbereich, die aktiv, aber nicht im Benachrichtigungsbereich sichtbar sind. Nur der Benutzer kann ein Symbol aus dem Überlauf in den Benachrichtigungsbereich heraufstufen, obwohl das System unter bestimmten Umständen ein Symbol vorübergehend als kurze Vorschau (unter einer Minute) in den Benachrichtigungsbereich hochstufen kann.

Hinweis

Der Benutzer sollte das letzte Wort darüber haben, welche Symbole er im Benachrichtigungsbereich sehen möchte. Vor der Installation eines nicht vorübergehenden Symbols im Benachrichtigungsbereich sollte der Benutzer um seine Berechtigung gebeten werden. Außerdem sollte ihnen (normalerweise über das Kontextmenü) die Möglichkeit gegeben werden, das Symbol aus dem Benachrichtigungsbereich zu entfernen.

 

Die NOTIFYICONDATA-Struktur , die im Aufruf an Shell_NotifyIcon gesendet wird, enthält Informationen, die sowohl das Symbol für den Benachrichtigungsbereich als auch die Benachrichtigung selbst angeben. Im Folgenden sind die Elemente aufgeführt, die für das Symbol des Benachrichtigungsbereichs selbst spezifisch sind und über NOTIFYICONDATA festgelegt werden können.

  • Die Ressource, aus der das Symbol genommen wird.
  • Ein eindeutiger Bezeichner für das Symbol.
  • Der Stil der QuickInfo des Symbols.
  • Der Status des Symbols (ausgeblendet, freigegeben oder beides) im Benachrichtigungsbereich.
  • Das Handle eines Anwendungsfensters, das dem Symbol zugeordnet ist.
  • Ein Rückrufnachrichtenbezeichner, der es dem Symbol ermöglicht, Ereignisse zu kommunizieren, die innerhalb des umgebenden Rechtecks und der Ballonbenachrichtigung des Symbols mit dem zugeordneten Anwendungsfenster auftreten. Das begrenzungsfähige Rechteck des Symbols kann über Shell_NotifyIconGetRect abgerufen werden.

Jedes Symbol im Benachrichtigungsbereich kann auf zwei Arten identifiziert werden:

  • Die GUID, mit der das Symbol in der Registrierung deklariert wird. Dies ist die bevorzugte Methode unter Windows 7 und höher.
  • Das Handle eines Fensters, das dem Symbol für den Benachrichtigungsbereich zugeordnet ist, sowie ein anwendungsdefinierter Symbolbezeichner. Diese Methode wird unter Windows Vista und früher verwendet.

Symbole im Infobereich können über eine QuickInfo verfügen. Die QuickInfo kann entweder eine Standard-QuickInfo (bevorzugt) oder eine von der Anwendung gezeichnete Popup-Benutzeroberfläche sein. Eine QuickInfo ist zwar nicht erforderlich, wird jedoch empfohlen.

Benachrichtigungsbereichssymbole sollten hohe DPI-Werte aufweisen. Eine Anwendung sollte in der Ressourcendatei sowohl ein Symbol mit 16 x 16 Pixeln als auch ein 32x32-Symbol bereitstellen und dann LoadIconMetric verwenden, um sicherzustellen, dass das richtige Symbol geladen und skaliert wird.

Die Anwendung, die für das Symbol des Benachrichtigungsbereichs verantwortlich ist, sollte einen Mausklick für dieses Symbol verarbeiten. Wenn ein Benutzer mit der rechten Maustaste auf das Symbol klickt, sollte ein normales Kontextmenü angezeigt werden. Das Ergebnis eines einzelnen Mausklicks mit der linken Maustaste variiert jedoch mit der Funktion des Symbols. Es sollte angezeigt werden, was der Benutzer in der form erwartet, die am besten für diesen Inhalt geeignet ist – ein Popupfenster, ein Dialogfeld oder das Programmfenster selbst. Bei instance kann status Text für ein status-Symbol oder ein Schieberegler für die Lautstärkeregelung angezeigt werden.

Die Platzierung eines Popupfensters oder Dialogfelds, das sich aus dem Klick ergibt, sollte in der Nähe der Koordinate des Klickens im Benachrichtigungsbereich platziert werden. Verwenden Sie CalculatePopupWindowPosition , um den Speicherort zu bestimmen.

Das Symbol kann dem Benachrichtigungsbereich hinzugefügt werden, ohne eine Benachrichtigung anzuzeigen, indem nur die symbolspezifischen Elemente von NOTIFYICONDATA definiert werden (oben erläutert) und Shell_NotifyIcon aufgerufen werden, wie hier gezeigt:

NOTIFYICONDATA nid = {};
// Do NOT set the NIF_INFO flag.
...                    
Shell_NotifyIcon(NIM_ADD, &nid);

Sie können das Symbol auch dem Benachrichtigungsbereich hinzufügen und eine Benachrichtigung in einem Aufruf an Shell_NotifyIcon anzeigen. Fahren Sie dazu mit den Anweisungen in diesem Thema fort.

Definieren der NOTIFYICONDATA-Version

Mit dem Fortschritt von Windows wurde die NOTIFYICONDATA-Struktur erweitert, um mehr Member zu enthalten, um mehr Funktionen zu definieren. Konstanten werden verwendet, um zu deklarieren, welche Version von NOTIFYICONDATA mit dem Symbol ihres Benachrichtigungsbereichs verwendet werden soll, um abwärtskompatibilität zu ermöglichen. Sofern es keinen zwingenden Grund gibt, etwas anderes zu tun, wird dringend empfohlen, die in Windows Vista eingeführte NOTIFYICON_VERSION_4 Version zu verwenden. Diese Version bietet die vollständige verfügbare Funktionalität, einschließlich der bevorzugten Möglichkeit, das Symbol für den Benachrichtigungsbereich mithilfe einer registrierten GUID zu identifizieren, einen überlegenen Rückrufmechanismus und eine bessere Barrierefreiheit.

Legen Sie die Version über die folgenden Aufrufe fest:

NOTIFYICONDATA nid = {};
... 
nid.uVersion = NOTIFYICON_VERSION_4;
// Add the icon
Shell_NotifyIcon(NIM_ADD, &nid);
// Set the version
Shell_NotifyIcon(NIM_SETVERSION, &nid);

Beachten Sie, dass bei diesem Aufruf von Shell_NotifyIcon keine Benachrichtigung angezeigt wird.

Definieren des Benachrichtigungslooks und -inhalts

Eine Benachrichtigung ist ein spezieller Typ des QuickInfo-Steuerelements für Ballons. Sie enthält einen Titel, Textkörper und ein Symbol. Wie ein Fenster verfügt es in der oberen rechten Ecke über die Schaltfläche Schließen . Sie enthält auch eine Optionsschaltfläche, mit der das Element Benachrichtigungsbereichsymbole im Systemsteuerung geöffnet wird, sodass der Benutzer das Symbol ein- oder ausblenden oder nur Benachrichtigungen ohne Symbol anzeigen kann.

Screenshot der Benachrichtigungsblase, die angibt, dass die Akkuleistung niedrig ist

Die NOTIFYICONDATA-Struktur , die im Aufruf an Shell_NotifyIcon gesendet wird, enthält Informationen, die sowohl das Symbol für den Benachrichtigungsbereich als auch die Benachrichtigungsblase selbst angibt. Im Folgenden sind die Elemente aufgeführt, die für die Benachrichtigung spezifisch sind und über NOTIFYICONDATA festgelegt werden können.

  • Ein Symbol, das in der Benachrichtigungsblase angezeigt werden soll, das durch den Benachrichtigungstyp angegeben wird. Die Größe des Symbols kann sowie benutzerdefinierte Symbole angegeben werden.
  • Ein Benachrichtigungstitel. Dieser Titel sollte in Englisch maximal 48 Zeichen lang sein (um die Lokalisierung zu ermöglichen). Der Titel ist die erste Zeile der Benachrichtigung und wird durch die Verwendung von Schriftgrad, Farbe und Gewichtung getrennt.
  • Text zur Verwendung im Textkörper der Benachrichtigung. Dieser Text sollte maximal 200 Zeichen in Englisch sein (um die Lokalisierung zu ermöglichen).
  • Gibt an, ob die Benachrichtigung verworfen werden soll, wenn sie nicht sofort angezeigt werden kann.
  • Ein Timeout für die Benachrichtigung. Diese Einstellung wird in Windows Vista und späteren Systemen zugunsten einer systemweiten Timeouteinstellung für Barrierefreiheit ignoriert.
  • Legen Sie fest, ob die Benachrichtigung die Ruhezeit einhalten soll, indem Sie das Flag NIIF_RESPECT_QUIET_TIME festlegen.

Hinweis

Die Schnittstellen IUserNotification und IUserNotification2 sind COM-Wrapper (Component Object Model) für Shell_NotifyIcon. Derzeit bieten sie jedoch nicht die vollständige NOTIFYICON_VERSION_4 Funktionalität, die direkt über Shell_NotifyIcon verfügbar ist, einschließlich der Verwendung einer GUID zum Identifizieren des Infobereichssymbols.

 

Überprüfen des Benutzerstatus

Das System verwendet die SHQueryUserNotificationState-Funktion , um zu überprüfen, ob sich der Benutzer in einer ruhigen Zeit, außerhalb des Computers oder in einem unterbrechungslosen Zustand wie dem Präsentationsmodus befindet. Ob das System Ihre Benachrichtigung anzeigt, hängt von diesem Zustand ab.

Hinweis

Wenn Ihre Anwendung eine benutzerdefinierte Benachrichtigungsmethode verwendet, die nicht Shell_NotifyIcon, IUserNotification oder IUserNotification2 verwendet, sollte shQueryUserNotificationState immer explizit aufgerufen werden, um zu bestimmen, ob die Benachrichtigungsbenutzeroberfläche zu diesem Zeitpunkt angezeigt werden soll.

 

Benachrichtigungen, die bei Abwesenheit des Benutzers gesendet werden, werden für die Anzeige in die Warteschlange eingereiht. Da Sie jedoch nicht wissen können, wann der Benutzer zurückkehren wird oder ob die Benachrichtigung zu diesem Zeitpunkt noch gültig ist, können Sie die Benachrichtigung später erneut senden.

Während der Ruhezeit gesendete Benachrichtigungen werden nicht angezeigt verworfen. Entwurfsrichtlinien verlangen, dass alle Benachrichtigungen ignorierbar sind. Sie sollten keine sofortige Benutzeraktion erfordern. Daher ist keine Benachrichtigung so wichtig, dass die Ruhezeit überschrieben werden sollte.

Anzeigen der Benachrichtigung

Nachdem Sie die NOTIFYICONDATA-Version festgelegt und die Benachrichtigung in einer NOTIFYICONDATA-Struktur definiert haben, rufen Sie Shell_NotifyIcon auf, um das Symbol anzuzeigen.

  • Wenn das Benachrichtigungsbereichssymbol nicht vorhanden ist, rufen Sie Shell_NotifyIcon auf, um das Symbol hinzuzufügen. Führen Sie dies sowohl für vorübergehende als auch für nicht vorübergehende Symbole aus.

    NOTIFYICONDATA nid = {};
    ...                    
    Shell_NotifyIcon(NIM_ADD, &nid);
    
  • Wenn das Symbol für den Infobereich bereits vorhanden ist, rufen Sie Shell_NotifyIcon auf, um das Symbol zu ändern.

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

Der folgende Code zeigt ein Beispiel für das Festlegen von NOTIFYICONDATA-Daten und das Senden über Shell_NotifyIcon. Beachten Sie, dass in diesem Beispiel das Benachrichtigungssymbol über eine GUID (bevorzugt in Windows 7) identifiziert wird.

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

Entfernen eines Symbols

Um ein Symbol zu entfernen, rufen Sie für instance, wenn Sie das Symbol nur vorübergehend hinzugefügt haben, um eine Benachrichtigung zu übertragen, Shell_NotifyIconwie hier gezeigt. In diesem Aufruf ist nur eine minimale NOTIFYICONDATA-Struktur erforderlich, die das Symbol identifiziert.

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

Hinweis

Wenn eine Anwendung deinstalliert wird, kann das Benachrichtigungsbereichssymbol für den Benutzer noch bis zu sieben Tage lang auf der Seite Infobereichsymbole im Systemsteuerung angezeigt werden. Alle dort vorgenommenen Änderungen haben jedoch keine Auswirkungen.

 

SDK-Beispiel

Ein vollständiges Beispiel für die Verwendung von Shell_NotifyIcon finden Sie im NotificationIcon-Beispiel im Windows Software Development Kit (SDK).

Shell_NotifyIcon

Shell_NotifyIconGetRect

NOTIFYICONDATA

SHQueryUserNotificationState

IUserNotification

IUserNotification2

Die Taskleiste

Taskleistenerweiterungen