Benachrichtigungen und Infobereich

Der Infobereich ist der Teil der Taskleiste, der als temporäre Quelle für Benachrichtigungen und Statusinformationen dient. Er kann auch verwendet werden, um Symbole für System- und Programmfunktionen anzuzeigen, die nicht auf dem Desktop angezeigt werden, z. B. Akkustand, Lautstärkeregelung und Netzwerkstatus. Der Infobereich wurde früher als „Statusbereich“ bezeichnet.

Dieses Thema enthält folgende Abschnitte:

Richtlinien für Benachrichtigungen und Infobereich

In den Abschnitten Benachrichtigungen und Infobereich der Windows-Richtlinien für Interaktionen mit der Benutzererfahrung finden Sie Informationen zu bewährten Methoden für die Verwendung von Benachrichtigungen und Infobereich. Benachrichtigungen sollen Benutzer*innen durch eine angemessene Verwendung Vorteile bieten, ohne sie zu stören oder abzulenken.

Der Infobereich ist nicht für kritische Informationen vorgesehen, die sofortige Reaktionen erfordern. Er ist auch nicht für den schnellen Zugriff auf Programme oder Befehle vorgesehen. Ab Windows 7 wird der größte Teil dieser Funktionalität am besten über die Taskleistenschaltfläche einer Anwendung bereitgestellt.

Windows 7 ermöglicht Benutzer*innen die Unterdrückung aller Benachrichtigungen aus einer Anwendung, wenn gewünscht. Eine gut überlegte Gestaltung und Verwendung von Benachrichtigungen wird Benutzer*innen daher eher dazu bewegen, die Anzeige von Benachrichtigungen für Ihre Anwendung weiter zuzulassen. Benachrichtigungen sind eine Unterbrechung; stellen Sie daher sicher, dass sie es wert sind.

Windows 7 führt das Konzept der „Ruhezeit“ ein. Die Ruhezeit ist als die erste Stunde definiert, nachdem sich neue Benutzer*innen zum ersten Mal überhaupt oder zum ersten Mal nach einem Betriebssystemupgrade oder einer Neuinstallation bei ihren Konten anmelden. Diese Zeit wird reserviert, damit sich die Benutzer*innen mit der neuen Umgebung vertraut machen können, ohne von Benachrichtigungen abgelenkt zu werden. Während dieser Zeit gilt für die meisten Benachrichtigungen, dass sie nicht gesendet oder angezeigt werden sollten. Zu den Ausnahmen gehört das Feedback, das Benutzer*innen als Reaktion auf Benutzeraktionen erwarten würden, wenn sie beispielsweise ein USB-Gerät anschließen oder ein Dokument drucken. API-Besonderheiten hinsichtlich der Ruhezeit werden weiter unten in diesem Thema beschrieben.

Erstellen und Anzeigen von Benachrichtigungen

In den übrigen Abschnitten in diesem Thema wird das grundsätzliche Verfahren für die Anzeige einer Benachrichtigung aus Ihrer Anwendung für Benutzer*innen beschrieben.

  1. Hinzufügen von Benachrichtigungssymbolen
  2. Definieren der NOTIFYICONDATA-Version
  3. Definieren des Aussehens und Inhalts von Benachrichtigungen
  4. Überprüfen des Benutzerstatus
  5. Anzeigen von Benachrichtigungen
  6. Entfernen von Symbolen

Hinzufügen von Benachrichtigungssymbolen

Um eine Benachrichtigung anzuzeigen, müssen Sie ein Symbol für den Infobereich erstellen. In bestimmten Fällen, z. B. für Microsoft Communicator oder den Akkustand, ist dieses Symbol bereits vorhanden. In vielen anderen Fällen wird jedoch nur so lange ein Symbol zum Infobereich hinzugefügt, wie zum Anzeigen einer Benachrichtigung erforderlich ist. In beiden Fällen wird das Symbol über die Funktion Shell_NotifyIcon hinzugefügt. Shell_NotifyIcon ermöglicht Ihnen das Hinzufügen, Ändern oder Löschen eines Symbols im Infobereich.

Infobereich mit drei Symbolen

Wenn dem Infobereich in Windows 7 ein Symbol hinzugefügt wird, wird es standardmäßig dem Überlaufabschnitt des Infobereichs hinzugefügt. Dieser Bereich enthält Symbole für den Infobereich, die zwar aktiv sind, aber nicht im Infobereich angezeigt werden. Symbole können nur von Benutzer*innen vom Überlauf- zum Infobereich heraufgestuft werden. Das System kann jedoch unter bestimmten Umständen ein Symbol vorübergehend (unter einer Minute) in Form einer kurzen Vorschau im Infobereich anzeigen.

Hinweis

Benutzer*innen sollten die endgültige Entscheidung darüber haben, welche Symbole im Infobereich angezeigt werden. Vor der Installation eines nicht vorübergehend angezeigten Symbols im Infobereich sollten Benutzer*innen um die entsprechende Genehmigung gebeten werden. Sie sollten auch die Option erhalten (normalerweise über das Kontextmenü), das Symbol aus dem Infobereich zu entfernen.

 

Die Struktur NOTIFYICONDATA, die im Aufruf an Shell_NotifyIcon gesendet wird, enthält Spezifikationen für das Infobereichsymbol und die Benachrichtigung selbst. Im Folgenden werden die Elemente aufgelistet, die für das Infobereichsymbol spezifisch sind und über NOTIFYICONDATA festgelegt werden können.

  • Die Ressource, aus der das Symbol stammt.
  • Ein eindeutiger Bezeichner für das Symbol.
  • Die Formatvorlage für die QuickInfo des Symbols.
  • Der Status des Symbols (ausgeblendet, freigegeben oder beides) im Infobereich.
  • Das Handle des Anwendungsfensters, das dem Symbol zugeordnet ist.
  • Eine Rückrufnachrichten-ID, die dem Symbol Mitteilungen zu Ereignissen ermöglicht, die im umgebenden Rechteck und in der Sprechblasenbenachrichtigung des Symbols für das zugeordnete Anwendungsfenster angezeigt werden. Das umgebende Rechteck des Symbols kann über Shell_NotifyIconGetRect abgerufen werden.

Jedes Symbol im Infobereich kann auf zwei Arten angegeben werden:

  • Über die GUID, mit der das Symbol in der Registrierung deklariert wird. Dies ist die bevorzugte Methode unter Windows 7 und höher.
  • Über das Handle des Fensters, das dem Infobereichsymbol zugeordnet ist, sowie eine anwendungsdefinierte Symbol-ID. Diese Methode wird unter Windows Vista und früheren Versionen verwendet.

Infobereichsymbole können über eine QuickInfo verfügen. Bei der QuickInfo kann es sich entweder um eine standardmäßige QuickInfo (bevorzugt) oder um eine von der Anwendung gezeichnete Popup-UI handeln. Eine QuickInfo ist zwar nicht erforderlich, wird jedoch empfohlen.

Infobereichsymbole sollten mit hohen DPI-Werten kompatibel sein. Anwendungen sollten sowohl ein Symbol mit 16 x 16 Pixeln als auch ein Symbol mit 32 x 32 Pixeln in der Ressourcendatei bereitstellen und anschließend LoadIconMetric verwenden, um sicherzustellen, dass das richtige Symbol geladen und ordnungsgemäß skaliert wird.

Die Anwendung, die für das Infobereichsymbol verantwortlich ist, sollte einen Mausklick auf dieses Symbol behandeln können. Wenn Benutzer*innen mit der rechten Maustaste auf das Symbol klicken, sollte ein normales Kontextmenü angezeigt werden. Das Ergebnis eines einzelnen Mausklicks mit der linken Maustaste sollte jedoch von der Funktion des Symbols abhängig sein. Es sollten die von den Benutzer*innen erwarteten Inhalte in dem Format angezeigt werden, das für diese Inhalte am besten geeignet ist – ein Popupfenster, ein Dialogfeld oder das Programmfenster selbst. Beispielsweise könnte ein Statustext für ein Statussymbol oder ein Schieberegler für die Lautstärkeregelung angezeigt werden.

Das Popupfenster oder Dialogfeld, das infolge des Mausklicks angezeigt wird, sollte in der Nähe der Koordinaten des Mausklicks im Infobereich platziert werden. Verwenden Sie CalculatePopupWindowPosition, um die Anzeigestelle anzugeben.

Das Symbol kann dem Infobereich ohne Anzeige einer Benachrichtigung hinzugefügt werden, indem nur die symbolspezifischen Elemente von NOTIFYICONDATA (siehe oben) definiert werden und Shell_NotifyIcon aufgerufen wird, wie hier gezeigt:

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

Sie können das Symbol auch zum Infobereich hinzufügen und eine Benachrichtigung anzeigen, indem Sie einen einzigen Aufruf von Shell_NotifyIcon verwenden. Im weiteren Verlauf dieses Themas finden Sie die entsprechenden Anweisungen hierfür.

Definieren der NOTIFYICONDATA-Version

Mit der fortschreitenden Entwicklung von Windows wurde die Struktur NOTIFYICONDATA erweitert, um weitere Elemente zur Definition weiterer Funktionen einzufügen. Zur Deklaration der Version von NOTIFYICONDATA, die zur Abwärtskompatibilität mit dem Infobereichsymbol verwendet werden soll, werden Konstanten verwendet. Wenn es keinen zwingenden Grund gibt, eine andere Version zu verwenden, wird nachdrücklich empfohlen, die in Windows Vista eingeführte Version NOTIFYICON_VERSION_4 zu verwenden. Diese Version stellt die gesamte verfügbare Funktionalität bereit, einschließlich der bevorzugten Möglichkeit, das Infobereichsymbol über eine registrierte GUID zu bezeichnen, eines überlegenen Rückrufmechanismus und einer besseren Zugänglichkeit.

Sie legen 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 Aussehens und Inhalts von Benachrichtigungen

Eine Benachrichtigung ist eine spezielle Art von QuickInfo-Steuerelement für Sprechblasen. Sie umfasst einen Titel, einen Text und ein Symbol. Wie bei einem Fenster wird oben rechts die Schaltfläche Schließen angezeigt. Sie enthält auch die Schaltfläche Optionen, über die das Element für das Infobereichsymbol in der Systemsteuerung geöffnet wird, sodass Benutzer*innen das Symbol ein- oder ausblenden oder nur Benachrichtigungen ohne Symbol anzeigen können.

Screenshot einer Benachrichtigungssprechblase, die auf einen niedrigen Akkustand hinweist.

Die Struktur NOTIFYICONDATA, die im Aufruf von Shell_NotifyIcon gesendet wird, enthält Spezifikationen für das Infobereichsymbol und die Benachrichtigungssprechblase. Im Folgenden werden die Elemente aufgelistet, die für die Benachrichtigung spezifisch sind und über NOTIFYICONDATA festgelegt werden können.

  • Das Symbol, das in der Benachrichtigungssprechblase angezeigt werden soll, festgelegt durch den Benachrichtigungstyp. Sie können die Größe des Symbols sowie benutzerdefinierte Symbole spezifizieren.
  • Der Benachrichtigungstitel. Dieser Titel darf maximal 48 Zeichen enthalten und muss auf Englisch verfasst sein (um einfach übersetzt werden zu können). Der Titel ist die erste Zeile der Benachrichtigung und wird durch Schriftgrad, Farbe und Stärke abgesetzt.
  • Der Text für den Textkörper der Benachrichtigung. Dieser Text darf maximal 200 Zeichen enthalten und muss auf Englisch verfasst sein (um einfach übersetzt werden zu können).
  • Gibt an, ob die Benachrichtigung verworfen werden soll, wenn sie nicht sofort angezeigt werden kann.
  • Die Zeitüberschreitung für die Benachrichtigung. Diese Einstellung wird in Windows Vista und höher aus Gründen der Zugänglichkeit zugunsten einer systemweiten Einstellung für die Zeitüberschreitung ignoriert.
  • Gibt an, ob die Benachrichtigung die Ruhezeit respektieren soll, festgelegt durch das Flag NIIF_RESPECT_QUIET_TIME.

Hinweis

Bei den Schnittstellen IUserNotification und IUserNotification2 handelt es sich um Component Object Model (COM)-Wrapper für Shell_NotifyIcon. Derzeit ist jedoch nicht die gesamte Funktionalität von NOTIFYICON_VERSION_4 verfügbar, die direkt über Shell_NotifyIcon bereitgestellt wird, einschließlich der Verwendung einer GUID zur Identifizierung des Infobereichsymbols.

 

Überprüfen des Benutzerstatus

Das System verwendet die Funktion SHQueryUserNotificationState, um zu überprüfen, ob sich Benutzer*innen in der Ruhezeit, nicht am Computer oder in einem nicht unterbrechungsfähigen Zustand wie dem Präsentationsmodus befinden. Hiervon ist abhängig, ob das System Ihre Benachrichtigung anzeigt oder nicht.

Hinweis

Wenn Ihre Anwendung eine benutzerdefinierte Benachrichtigungsmethode verwendet, die nicht Shell_NotifyIcon, IUserNotification oder IUserNotification2 verwendet, sollte sie stets SHQueryUserNotificationState explizit aufrufen, um jeweils zu ermitteln, ob eine Benachrichtigungsoberfläche angezeigt werden soll.

 

Benachrichtigungen, die gesendet werden, während Benutzer*innen abwesend sind, werden zur Anzeige in eine Warteschlange gestellt. Da Sie jedoch nicht wissen können, wann die Benutzer*innen zurückkehren oder ob die jeweilige Benachrichtigung zu diesem Zeitpunkt noch gültig ist, sollten Sie die Benachrichtigung möglicherweise besser später erneut senden.

Benachrichtigungen, die während der Ruhezeit gesendet werden, werden verworfen, ohne angezeigt zu werden. Gemäß den Entwurfsrichtlinien müssen alle Benachrichtigungen ignoriert werden können. Sie sollten keine sofortigen Benutzeraktionen erfordern. Daher kann keine Benachrichtigung so wichtig sein, dass sie die Ruhezeit außer Kraft setzen sollte.

Anzeigen von Benachrichtigungen

Rufen Sie nach der Festlegung der Version von NOTIFYICONDATA und der Definition der Benachrichtigung in der Struktur NOTIFYICONDATA die Funktion Shell_NotifyIcon auf, um das Symbol anzuzeigen.

  • Wenn das Infobereichsymbol nicht vorhanden ist, rufen Sie Shell_NotifyIcon auf, um das Symbol hinzuzufügen. Dies gilt sowohl für vorübergehend als auch für nicht vorübergehend angezeigte Symbole.

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

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

Der folgende Code ist ein Beispiel dafür, wie Daten für NOTIFYICONDATA festgelegt und über Shell_NotifyIcon gesendet werden. Beachten Sie, dass in diesem Beispiel das Benachrichtigungssymbol über eine GUID angegeben wird (ab Windows 7 bevorzugt).

// 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 von Symbolen

Wenn Sie beispielsweise ein Symbol entfernen möchten, das nur vorübergehend angezeigt wird, rufen Sie Shell_NotifyIcon auf, wie hier gezeigt. Für diesen Aufruf ist zur Angabe des Symbols nur eine minimale Struktur für NOTIFYICONDATA erforderlich.

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

Hinweis

Wenn eine Anwendung deinstalliert wird, kann Benutzer*innen das Infobereichsymbol auf der Seite „Infobereichsymbole“ in der Systemsteuerung weitere sieben Tage als Option angezeigt werden. Hier durchgeführte Änderungen haben jedoch keine Auswirkungen.

 

SDK-Beispiel

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

Shell_NotifyIcon

Shell_NotifyIconGetRect

NOTIFYICONDATA

SHQueryUserNotificationState

IUserNotification

IUserNotification2

Taskleiste

Taskleistenerweiterungen