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 keine Anwesenheit auf dem Desktop haben, z. B. Akkustand, Lautstärkesteuerung und Netzwerkstatus. Der Infobereich wurde historisch als Taskleiste oder Statusbereich bekannt.

Dieses Thema enthält folgende Abschnitte:

Richtlinien für Benachrichtigungs- und Benachrichtigungsbereiche

In den Abschnitten "Benachrichtigungen und Benachrichtigungsbereich" der Windows Benutzeroberflächeninteraktionsrichtlinien finden Sie bewährte Methoden für die Verwendung von Benachrichtigungen und den Benachrichtigungsbereich. Ziel ist es, den Benutzer durch die entsprechende Nutzung von Benachrichtigungen zu nutzen, ohne ärgerlich oder ablenkend zu sein.

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

Windows 7 ermöglicht es einem Benutzer, alle Benachrichtigungen von einer Anwendung zu unterdrücken, wenn er sich entscheidet. Daher wird der Benachrichtigungsentwurf und die Verwendung dem Benutzer geneigt, ihre Anwendung weiterhin anzuzeigen. Benachrichtigungen sind eine Unterbrechung; stellen Sie sicher, dass sie es wert sind.

Windows 7 führt das Konzept der "stillen Zeit" ein. Die Ruhezeit wird als erste Stunde definiert, nachdem sich ein neuer Benutzer entweder zum ersten Mal oder zum ersten Mal nach einem Betriebssystemupgrade oder einer Neuinstallation bei seinem Konto anmeldet. Dieses Mal wird eingestellt, damit der Benutzer sich ohne Ablenkung von Benachrichtigungen mit der neuen Umgebung vertraut machen und sich mit der neuen Umgebung vertraut machen kann. Während dieser Zeit sollten die meisten Benachrichtigungen nicht gesendet oder angezeigt werden. Ausnahmen umfassen 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-Besonderheiten bezüglich der Ruhezeit werden weiter unten in diesem Thema erläutert.

Erstellen und Anzeigen einer Benachrichtigung

In den verbleibenden Abschnitten in diesem Thema wird das grundlegende Verfahren beschrieben, das sie befolgen soll, um eine Benachrichtigung von Ihrer Anwendung an den Benutzer anzuzeigen.

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

Hinzufügen eines Benachrichtigungssymbols

Um eine Benachrichtigung anzuzeigen, 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 jedoch nur ein Symbol hinzu, solange die Benachrichtigung angezeigt werden muss. In beiden Fällen wird dies mithilfe der Shell_NotifyIcon-Funktion erreicht. Shell_NotifyIcon ermöglicht es Ihnen, ein Symbol im Benachrichtigungsbereich hinzuzufügen, zu ändern oder zu löschen.

notification area containing three icons

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

Hinweis

Der Benutzer sollte die endgültige Entscheidung darüber haben, welche Symbole sie im Benachrichtigungsbereich anzeigen möchten. Bevor Sie ein nicht vorübergehendes Symbol im Benachrichtigungsbereich installieren, sollte der Benutzer zur Berechtigung aufgefordert werden. Sie sollten auch die Option (normalerweise auch das Kontextmenü) erhalten, um 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 diese Elemente aufgeführt, die sich auf das Symbol für den Benachrichtigungsbereich selbst beziehen, der über NOTIFYICONDATA festgelegt werden kann.

  • Die Ressource, aus der das Symbol genommen wird.
  • Ein eindeutiger Bezeichner für das Symbol.
  • Die Formatvorlage der QuickInfo des Symbols.
  • Der Status des Symbols (ausgeblendet, freigegeben oder beides) im Benachrichtigungsbereich.
  • Der Handle eines Anwendungsfensters, das dem Symbol zugeordnet ist.
  • Ein Rückrufmeldungsbezeichner, mit dem das Symbol Ereignisse kommunizieren kann, die im umgebenden Rechteck und der Sprechblasebenachrichtigung des Symbols mit dem zugeordneten Anwendungsfenster auftreten. Das umgebende 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 für Windows 7 und höher.
  • Das Handle eines Fensters, das dem Symbol "Benachrichtigungsbereich" zugeordnet ist, sowie ein anwendungsdefinierter Symbolbezeichner. Diese Methode wird für 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 anwendungsgezeichnete, Popup-Benutzeroberfläche sein. Während eine QuickInfo nicht erforderlich ist, wird empfohlen.

Symbole für den Benachrichtigungsbereich sollten mit hohem DPI-Wert beachtet werden. Eine Anwendung sollte sowohl ein 16 x 16-Pixel-Symbol als auch ein 32x32-Symbol in seiner Ressourcendatei bereitstellen und dann LoadIconMetric verwenden, um sicherzustellen, dass das richtige Symbol geladen und entsprechend skaliert wird.

Die Anwendung, die für das Symbol für den Benachrichtigungsbereich verantwortlich ist, sollte einen Mausklick für dieses Symbol behandeln. Wenn ein Benutzer mit der rechten Maustaste auf das Symbol klickt, sollte es ein normales Kontextmenü anzeigen. Das Ergebnis eines einzelnen Klicks mit der linken Maustaste variiert jedoch mit der Funktion des Symbols. Es sollte angezeigt werden, was der Benutzer im Formular erwarten würde, das für diesen Inhalt am besten geeignet ist – ein Popupfenster, ein Dialogfeld oder das Programmfenster selbst. So kann beispielsweise Statustext für ein Statussymbol oder ein Schieberegler für das Lautstärkesteuerelement angezeigt werden.

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

Das Symbol kann dem Benachrichtigungsbereich hinzugefügt werden, ohne eine Benachrichtigung anzuzeigen, indem nur die symbolspezifischen Mitglieder von NOTIFYICONDATA (oben beschrieben) definiert 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 zum Benachrichtigungsbereich hinzufügen und eine Benachrichtigung alle in einem Anruf an Shell_NotifyIcon anzeigen. Fahren Sie dazu mit den Anweisungen in diesem Thema fort.

Definieren der NOTIFYICONDATA-Version

Da Windows fortschritten, wurde die NOTIFYICONDATA-Struktur erweitert, um mehr Member einzuschließen, um mehr Funktionen zu definieren. Konstanten werden verwendet, um zu deklarieren, welche Version von NOTIFYICONDATA mit Ihrem Benachrichtigungsbereichssymbol verwendet werden soll, um die Abwärtskompatibilität zu ermöglichen. Es sei denn, es gibt einen zwingenden Grund, andernfalls zu tun, wird dringend empfohlen, die NOTIFYICON_VERSION_4-Version zu verwenden, die in Windows Vista eingeführt wurde. Diese Version bietet die vollständige verfügbare Funktionalität, einschließlich der bevorzugten Möglichkeit, das Symbol für den Benachrichtigungsbereich zu identifizieren, obwohl eine registrierte GUID, ein höherer 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 dieser Aufruf von Shell_NotifyIcon keine Benachrichtigung anzeigt.

Definieren des Benachrichtigungs-Aussehens und der Inhalte

Eine Benachrichtigung ist eine spezielle Art von QuickInfo-Steuerelement für Sprechblasen. Er enthält einen Titel, textkörper und ein Symbol. Wie ein Fenster verfügt sie über eine Schaltfläche " Schließen " in der oberen rechten Ecke. Es enthält auch eine Optionsschaltfläche, die das Element "Benachrichtigungsbereichssymbole" in der Systemsteuerung öffnet, wodurch der Benutzer das Symbol ein- oder ausblenden kann oder nur Benachrichtigungen ohne Symbol anzeigt.

screen shot of notification balloon indicating that battery power is low

Die IM Aufruf an Shell_NotifyIcon gesendete NOTIFICATIONICONDATA-Struktur enthält Informationen, die sowohl das Symbol für den Benachrichtigungsbereich als auch die Benachrichtigungssprechblase selbst angeben. Nachfolgend sind diese Elemente aufgeführt, die für die Benachrichtigung spezifisch sind, die über NOTIFYICONDATA festgelegt werden können.

  • Ein Symbol, das in der Benachrichtigungssprechblase angezeigt werden soll, die vom Benachrichtigungstyp angegeben wird. Die Größe des Symbols kann angegeben werden, sowie benutzerdefinierte Symbole.
  • Ein Benachrichtigungstitel. Dieser Titel sollte maximal 48 Zeichen lang in Englisch sein (um die Lokalisierung zu berücksichtigen). Der Titel ist die erste Zeile der Benachrichtigung und wird durch die Verwendung des Schriftgrads, der Farbe und der Gewichtung voneinander getrennt.
  • Text für die Verwendung im Textkörper der Benachrichtigung. Dieser Text sollte maximal 200 Zeichen in Englisch sein (um die Lokalisierung zu berücksichtigen).
  • 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 für eine systemweite Timeouteinstellung für Barrierefreiheit ignoriert.
  • Gibt an, ob die Benachrichtigung die Ruhezeit respektieren soll, legen Sie die NIIF_RESPECT_QUIET_TIME-Kennzeichnung fest.

Hinweis

Die IUserNotification- und IUserNotification2-Schnittstellen sind Component Object Model (COM)-Wrapper für Shell_NotifyIcon. Zu diesem Zeitpunkt bieten sie jedoch nicht die vollständige NOTIFYICON_VERSION_4 Funktionalität, die über Shell_NotifyIcon direkt verfügbar ist, einschließlich der Verwendung einer GUID, um das Symbol für den Benachrichtigungsbereich zu identifizieren.

 

Überprüfen des Benutzerstatus

Das System verwendet die FUNKTION SHQueryUserNotificationState , um zu überprüfen, ob sich der Benutzer in ruher Zeit befindet, nicht vom Computer entfernt oder in einem uninterrupablen Zustand wie dem Präsentationsmodus. Gibt an, 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 sie immer explizit SHQueryUserNotificationState aufrufen, um festzustellen, ob die Benachrichtigungsbenutzeroberfläche zu diesem Zeitpunkt angezeigt werden soll.

 

Benachrichtigungen, die gesendet werden, wenn der Benutzer weg ist, für die Anzeige in die Warteschlange gestellt werden, aber da Sie nicht wissen können, wann der Benutzer zurückgegeben wird oder ob die Benachrichtigung zu diesem Zeitpunkt noch gültig ist, sollten Sie die Benachrichtigung später erneut senden.

Während der stillen Zeit gesendete Benachrichtigungen werden nicht angezeigt. Entwurfsrichtlinien fordern, dass alle Benachrichtigungen nicht verlässigbar sind. Sie sollten keine sofortigen Benutzeraktionen erfordern. Daher ist keine Benachrichtigung so wichtig, dass sie die Ruhezeit außer Kraft setzen 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 Symbol für den Benachrichtigungsbereich nicht vorhanden ist, rufen Sie Shell_NotifyIcon auf, um das Symbol hinzuzufügen. Gehen Sie dazu sowohl für vorübergehende als auch nicht-vorübergehende Symbole vor.

    NOTIFYICONDATA nid = {};
    ...                    
    Shell_NotifyIcon(NIM_ADD, &nid);
    
  • Wenn das Symbol für den Benachrichtigungsbereich 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 identifiziert wird (bevorzugt in Windows 7).

// 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;
    
    nid.guidItem = guid;
    
    // 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, z. B. wenn Sie das Symbol nur vorübergehend hinzugefügt haben, um eine Benachrichtigung zu übertragen, rufen Sie Shell_NotifyIcon as hier gezeigt auf. 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 Symbol für den Benachrichtigungsbereich weiterhin dem Benutzer als Option auf der Seite "Benachrichtigungsbereichssymbole" im Systemsteuerung für bis zu sieben Tage angezeigt werden. Alle vorgenommenen Änderungen haben jedoch keine Auswirkung.

 

SDK-Beispiel

Im Beispiel für notificationIcon finden Sie im Windows Software Development Kit (SDK) ein vollständiges Beispiel für die Verwendung von Shell_NotifyIcon.

Shell_NotifyIcon

Shell_NotifyIconGetRect

NOTIFYICONDATA

SHQueryUserNotificationState

IUserNotification

IUserNotification2

Die Taskleiste

Taskleistenerweiterungen