Condividi tramite


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ò anche essere usato per visualizzare icone per le funzionalità di sistema e programma che non hanno presenza sul desktop, ad esempio il livello della batteria, il controllo del volume e lo stato della rete. L'area di notifica è stata nota storicamente come area di notifica o area di stato.

Questo argomento include le sezioni seguenti:

Linee guida per le aree di notifica e notifica

Vedere le sezioni Notifiche e Area di notifica delle linee guida per l'interazione dell'esperienza utente di Windows per le procedure consigliate per l'uso delle notifiche e dell'area di notifica. L'obiettivo è fornire un vantaggio utente tramite l'uso appropriato delle notifiche, senza essere fastidioso o distratto.

L'area di notifica non è destinata a informazioni critiche che devono essere eseguite immediatamente. Non è inoltre progettato per l'accesso rapido al programma o ai comandi. 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 sceglie, quindi la progettazione di notifiche ponderate e l'uso inclinerà l'utente per consentire all'applicazione di continuare a visualizzarle. Le notifiche sono un'interruzione; assicuratevi che ne valga la pena.

Windows 7 introduce il concetto di "tempo silenzioso". L'ora non interattiva viene definita come la prima ora dopo che un nuovo utente accede al proprio account per la prima volta o per la prima volta dopo un aggiornamento del sistema operativo o l'installazione pulita. Questa volta viene messo da 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 si aspetta di 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 in modalità non interattiva vengono illustrate più avanti in questo argomento.

Creazione e visualizzazione di una notifica

Le sezioni rimanenti di questo argomento illustrano 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 il livello della 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ò alzare di livello un'icona dall'overflow all'area di notifica, anche se in determinate circostanze il sistema può temporaneamente alzare di livello un'icona nell'area di notifica come breve anteprima (meno di un minuto).

Nota

L'utente deve avere la parola finale sulle icone che desidera visualizzare nell'area di notifica. Prima di installare un'icona non temporanea nell'area di notifica, all'utente deve essere richiesta l'autorizzazione. Dovrebbe anche essere data 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 stessa che possono essere impostati tramite NOTIFYICONDATA.

  • Risorsa da cui viene acquisita 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 del messaggio di callback che consente all'icona di comunicare gli eventi che si verificano all'interno del rettangolo di delimitazione dell'icona e notifica di fumetto con la finestra dell'applicazione associata. Il rettangolo di delimitazione 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 non è necessaria una descrizione comando, è consigliabile.

Le icone dell'area di notifica devono essere compatibili con valori DPI elevati. Un'applicazione deve fornire un'icona di 16x16 pixel e 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 l'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 si aspetta di 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 del volume.

La posizione di una finestra popup o di una finestra di dialogo risultante dal clic deve essere posizionata vicino alla coordinata del clic nell'area di notifica. Usare CalculatePopupWindowPosition per determinarne la posizione.

L'icona può essere aggiunta all'area di notifica senza visualizzare una notifica definendo solo i membri specifici dell'icona di NOTIFYICONDATA (descritto 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

Con l'avanzamento di Windows, la struttura NOTIFYICONDATA è stata ampliata 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 diversamente, è 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 tramite 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 balloon. 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 mostrare solo le notifiche senza un'icona.

screenshot dell'area di notifica che indica che l'alimentazione della batteria è insufficiente

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

  • Icona da visualizzare nell'area 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 viene impostato a parte tramite l'uso di dimensioni, colore e spessore del carattere.
  • Testo da utilizzare nel corpo della notifica. Questo testo deve essere un massimo di 200 caratteri in inglese (per supportare la localizzazione).
  • Indica se la notifica deve essere rimossa se non può essere visualizzata immediatamente.
  • Timeout per la notifica. Questa impostazione viene ignorata in Windows Vista e nei sistemi successivi a favore di un'impostazione di timeout dell'accessibilità a livello di sistema.
  • Indica se la notifica deve rispettare il tempo in modalità 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, al momento, non forniscono la funzionalità completa NOTIFYICON_VERSION_4 disponibile direttamente tramite Shell_NotifyIcon , incluso l'uso di un GUID per identificare l'icona dell'area di notifica.

 

Controllare lo stato utente

Il sistema usa la funzione SHQueryUserNotificationState per verificare se l'utente è in tempo non interattivo, 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 inviare nuovamente 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 quiete.

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, chiama 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 (preferibile 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ò ancora essere visualizzata all'utente come opzione nella pagina Icone area di notifica nel Pannello di controllo per un massimo di sette giorni. Tuttavia, eventuali modifiche apportate non avranno alcun effetto.

 

Esempio di SDK

Vedere l'esempio notificationIcon in Windows Software Development Kit (SDK) per un esempio completo dell'uso di Shell_NotifyIcon.

Shell_NotifyIcon

Shell_NotifyIconGetRect

NOTIFYICONDATA

SHQueryUserNotificationState

IUserNotification

IUserNotification2

Barra delle applicazioni

Estensioni della barra delle applicazioni