Notifiche e area di notifica

L'area di notifica è una parte della barra delle applicazioni che fornisce un'origine temporanea per le notifiche e lo stato. Può essere usato anche per visualizzare icone per le funzionalità di sistema e programma che non hanno presenza sul desktop, ad esempio livello di batteria, controllo del volume e stato di rete. L'area di notifica è stata conosciuta storicamente come area di archiviazione o stato del sistema.

In questo argomento sono incluse le sezioni seguenti:

Linee guida per l'area di notifica e notifica

Per le procedure consigliate per l'uso delle notifiche e dell'area di notifica, vedere le sezioni Notifiche e Area di notifica di Windows. L'obiettivo è quello di offrire vantaggio all'utente tramite l'uso appropriato delle notifiche, senza essere fastidiosi o distratti.

L'area di notifica non è per informazioni critiche che devono essere eseguite immediatamente. Non è inoltre previsto per l'accesso rapido al programma o al comando. A partire da Windows 7, gran parte di questa funzionalità viene eseguita al meglio tramite il pulsante della barra delle applicazioni di un'applicazione.

Windows 7 consente a un utente di eliminare tutte le notifiche da un'applicazione se scelgono, quindi la progettazione di notifiche ponderata e l'uso inclinerà l'utente per consentire all'applicazione di continuare a visualizzarli. Le notifiche sono un'interruzione; assicurarsi che ne vale la pena.

Windows 7 introduce il concetto di "tempo tranquillo". Il tempo di silenzio viene definito come la prima ora dopo un nuovo utente accede al suo account per la prima volta o per la prima volta dopo un aggiornamento del sistema operativo o l'installazione pulita. Questa volta viene messo a parte per consentire all'utente di esplorare e acquisire familiarità con il nuovo ambiente senza la distrazione delle notifiche. Durante questo periodo, la maggior parte delle notifiche non deve essere inviata o visualizzata. Le eccezioni includono commenti e suggerimenti che l'utente dovrebbe visualizzare in risposta a un'azione dell'utente, ad esempio quando collega un dispositivo USB o stampa un documento. Le specifiche dell'API relative al tempo di silenzio vengono illustrate più avanti in questo argomento.

Creazione e visualizzazione di una notifica

Le sezioni rimanenti di questo argomento descrivono la procedura di base da seguire per visualizzare una notifica dall'applicazione all'utente.

  1. Aggiungere un'icona di notifica
  2. Definire la versione NOTIFYICONDATA
  3. Definire l'aspetto e il contenuto della notifica
  4. Controllare lo stato utente
  5. Visualizzare la notifica
  6. Rimozione di un'icona

Aggiungere un'icona di notifica

Per visualizzare una notifica, è necessario avere un'icona nell'area di notifica. In alcuni casi, ad esempio Microsoft Communicator o livello di batteria, tale icona sarà già presente. In molti altri casi, tuttavia, si aggiungerà un'icona all'area di notifica solo se necessario per visualizzare la notifica. In entrambi i casi, questa operazione viene eseguita usando la funzione Shell_NotifyIcon . Shell_NotifyIcon consente di aggiungere, modificare o eliminare un'icona nell'area di notifica.

area di notifica contenente tre icone

Quando un'icona viene aggiunta all'area di notifica in Windows 7, viene aggiunta alla sezione overflow dell'area di notifica per impostazione predefinita. Questa area contiene icone dell'area di notifica attive, ma non visibili nell'area di notifica. Solo l'utente può promuovere un'icona dall'overflow all'area di notifica, anche se in determinate circostanze il sistema può promuovere temporaneamente un'icona nell'area di notifica come anteprima breve (sotto un minuto).

Nota

L'utente deve avere la parola finale su quali icone vogliono visualizzare nell'area di notifica. Prima di installare un'icona non temporanea nell'area di notifica, l'utente deve richiedere l'autorizzazione. Devono inoltre essere fornite l'opzione (normalmente anche se il relativo menu di scelta rapida) per rimuovere l'icona dall'area di notifica.

 

La struttura NOTIFYICONDATA inviata nella chiamata a Shell_NotifyIcon contiene informazioni che specificano sia l'icona dell'area di notifica che la notifica stessa. Di seguito sono riportati gli elementi specifici dell'icona dell'area di notifica che può essere impostata tramite NOTIFYICONDATA.

  • Risorsa da cui viene presa l'icona.
  • Identificatore univoco per l'icona.
  • Stile della descrizione comando dell'icona.
  • Stato dell'icona (nascosto, condiviso o entrambi) nell'area di notifica.
  • Handle di una finestra dell'applicazione associata all'icona.
  • Identificatore di messaggio di callback che consente all'icona di comunicare gli eventi che si verificano all'interno del rettangolo di selezione dell'icona e della notifica a forma di palloncino con la finestra dell'applicazione associata. Il rettangolo di selezione dell'icona può essere recuperato tramite Shell_NotifyIconGetRect.

Ogni icona nell'area di notifica può essere identificata in due modi:

  • GUID con cui l'icona viene dichiarata nel Registro di sistema. Questo è il metodo preferito in Windows 7 e versioni successive.
  • Handle di una finestra associata all'icona dell'area di notifica, oltre a un identificatore di icona definito dall'applicazione. Questo metodo viene usato in Windows Vista e versioni precedenti.

Le icone nell'area di notifica possono avere una descrizione comando. La descrizione comando può essere una descrizione comando standard (preferita) o un'interfaccia utente popup disegnata dall'applicazione. Anche se una descrizione comando non è obbligatoria, è consigliabile.

Le icone dell'area di notifica devono essere consapevoli di valori DPI elevati. Un'applicazione deve fornire sia un'icona a 16x16 pixel che un'icona 32x32 nel file di risorse e quindi usare LoadIconMetric per assicurarsi che l'icona corretta venga caricata e ridimensionata in modo appropriato.

L'applicazione responsabile dell'icona dell'area di notifica deve gestire un clic del mouse per tale icona. Quando un utente fa clic con il pulsante destro del mouse sull'icona, dovrebbe essere visualizzato un normale menu di scelta rapida. Tuttavia, il risultato di un singolo clic con il pulsante sinistro del mouse varia con la funzione dell'icona. Dovrebbe visualizzare ciò che l'utente dovrebbe visualizzare nel formato più adatto a tale contenuto, ovvero una finestra popup, una finestra di dialogo o la finestra del programma stessa. Ad esempio, potrebbe visualizzare il testo di stato per un'icona di stato o un dispositivo di scorrimento per il controllo volume.

La posizione di una finestra popup o di una finestra di dialogo che restituisce i risultati dal clic deve essere posizionata vicino alla coordinata del clic nell'area di notifica. Usare CalculatePopupWindowPosition per determinare la posizione.

L'icona può essere aggiunta all'area di notifica senza visualizzare una notifica definendo solo i membri specifici dell'icona di NOTIFYICONDATA (descritti in precedenza) e chiamando Shell_NotifyIcon come illustrato di seguito:

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

È anche possibile aggiungere l'icona all'area di notifica e visualizzare una notifica tutto in una chiamata a Shell_NotifyIcon. A tale scopo, continuare con le istruzioni contenute in questo argomento.

Definire la versione NOTIFYICONDATA

Man mano che Windows è stato eseguito, la struttura NOTIFYICONDATA è stata espansa per includere più membri per definire più funzionalità. Le costanti vengono usate per dichiarare la versione di NOTIFYICONDATA da usare con l'icona dell'area di notifica, per consentire la compatibilità con le versioni precedenti. A meno che non vi sia un motivo interessante per fare in caso contrario, è consigliabile usare la versione NOTIFYICON_VERSION_4, introdotta in Windows Vista. Questa versione offre la funzionalità completa disponibile, inclusa la possibilità preferita di identificare l'icona dell'area di notifica anche se un GUID registrato, un meccanismo di callback superiore e una migliore accessibilità.

Impostare la versione tramite le chiamate seguenti:

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

Si noti che questa chiamata a Shell_NotifyIcon non visualizza una notifica.

Definire l'aspetto e il contenuto della notifica

Una notifica è un tipo speciale di controllo descrizione comando palloncino. Contiene un titolo, un testo del corpo e un'icona. Come una finestra, ha un pulsante Chiudi nell'angolo superiore destro. Contiene anche un pulsante Opzioni che apre l'elemento Icone area di notifica nel Pannello di controllo, che consente all'utente di visualizzare o nascondere l'icona o visualizzare solo le notifiche senza un'icona.

schermata del palloncino di notifica che indica che la potenza della batteria è bassa

La struttura NOTIFYICONDATA inviata nella chiamata a Shell_NotifyIcon contiene informazioni che specificano sia l'icona dell'area di notifica che il palloncino di notifica stesso. Di seguito sono riportati gli elementi specifici della notifica che può essere impostata tramite NOTIFYICONDATA.

  • Icona da visualizzare nel palloncino di notifica, specificata dal tipo di notifica. È possibile specificare le dimensioni dell'icona, nonché le icone personalizzate.
  • Titolo di notifica. Questo titolo deve avere una lunghezza massima di 48 caratteri in inglese (per supportare la localizzazione). Il titolo è la prima riga della notifica e si distingue per l'uso di dimensioni, colore e peso del carattere.
  • Testo da utilizzare nel corpo della notifica. Questo testo deve essere composto da un massimo di 200 caratteri in inglese (per supportare la localizzazione).
  • Indica se la notifica deve essere eliminata se non può essere visualizzata immediatamente.
  • Timeout per la notifica. Questa impostazione viene ignorata nei sistemi Windows Vista e versioni successive a favore di un'impostazione di timeout di accessibilità a livello di sistema.
  • Indica se la notifica deve rispettare l'ora non interattiva, impostata tramite il flag di NIIF_RESPECT_QUIET_TIME .

Nota

Le interfacce IUserNotification e IUserNotification2 sono wrapper COM (Component Object Model) per Shell_NotifyIcon. Tuttavia, in questo momento, non forniscono la funzionalità NOTIFYICON_VERSION_4 completa disponibile tramite Shell_NotifyIcon direttamente, incluso l'uso di un GUID per identificare l'icona dell'area di notifica.

 

Controllare lo stato dell'utente

Il sistema usa la funzione SHQueryUserNotificationState per verificare se l'utente è in tempo non attivo, lontano dal computer o in uno stato non interrupperabile, ad esempio la modalità Presentazione. Se il sistema visualizza la notifica dipende da questo stato.

Nota

Se l'applicazione usa un metodo di notifica personalizzato che non usa Shell_NotifyIcon, IUserNotification o IUserNotification2, deve sempre chiamare in modo esplicito SHQueryUserNotificationState per determinare se deve visualizzare l'interfaccia utente di notifica in quel momento.

 

Le notifiche inviate quando l'utente è in coda per la visualizzazione, ma poiché non è possibile sapere quando l'utente restituirà o se la notifica sarà ancora valida in quel momento, è possibile prendere in considerazione la possibilità di inviare di nuovo la notifica in un secondo momento.

Le notifiche inviate durante il tempo non crittografato vengono annullate. Le linee guida di progettazione chiedono che tutte le notifiche siano ignorabili. Non devono richiedere un'azione immediata da parte dell'utente. Pertanto, nessuna notifica è così importante che debba eseguire l'override del tempo di inattività.

Visualizzare la notifica

Dopo aver impostato la versione NOTIFYICONDATA e aver definito la notifica in una struttura NOTIFYICONDATA , chiamare Shell_NotifyIcon per visualizzare l'icona.

  • Se l'icona dell'area di notifica non è presente, chiamare Shell_NotifyIcon per aggiungere l'icona. Eseguire questa operazione sia per le icone temporanee che per le icone non temporanee.

    NOTIFYICONDATA nid = {};
    ...                    
    Shell_NotifyIcon(NIM_ADD, &nid);
    
  • Se l'icona dell'area di notifica è già presente, chiamare Shell_NotifyIcon per modificare l'icona.

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

Il codice seguente illustra un esempio di impostazione dei dati NOTIFYICONDATA e dell'invio tramite Shell_NotifyIcon. Si noti che questo esempio identifica l'icona di notifica tramite un GUID (preferito 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;
    
    // 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;

Rimozione di un'icona

Per rimuovere un'icona, ad esempio quando è stata aggiunta temporaneamente l'icona per trasmettere una notifica, chiamare Shell_NotifyIconcome illustrato di seguito. In questa chiamata è necessaria solo una struttura NOTIFYICONDATA minima che identifica l'icona.

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

Nota

Quando un'applicazione viene disinstallata, l'icona dell'area di notifica può comunque essere visualizzata all'utente come opzione nella pagina Icone area di notifica nel Pannello di controllo per un massimo di sette giorni. Tuttavia, tutte le modifiche apportate non avranno alcun effetto.

 

Esempio di SDK

Per un esempio completo dell'uso di Shell_NotifyIcon, vedere l'esempio notificationIcon in Windows Software Development Kit (SDK).

Shell_NotifyIcon

Shell_NotifyIconGetRect

NOTIFYICONDATA

SHQueryUserNotificationState

IUserNotification

IUserNotification2

Barra delle applicazioni

Estensioni della barra delle applicazioni