Condividi tramite


Struttura NOTIFYICONDATAW (shellapi.h)

Contiene informazioni che il sistema deve visualizzare le notifiche nell'area di notifica. Usato da Shell_NotifyIcon.

Sintassi

typedef struct _NOTIFYICONDATAW {
  DWORD cbSize;
  HWND  hWnd;
  UINT  uID;
  UINT  uFlags;
  UINT  uCallbackMessage;
  HICON hIcon;
#if ...
  WCHAR szTip[64];
#else
  WCHAR szTip[128];
#endif
  DWORD dwState;
  DWORD dwStateMask;
  WCHAR szInfo[256];
  union {
    UINT uTimeout;
    UINT uVersion;
  } DUMMYUNIONNAME;
  WCHAR szInfoTitle[64];
  DWORD dwInfoFlags;
  GUID  guidItem;
  HICON hBalloonIcon;
} NOTIFYICONDATAW, *PNOTIFYICONDATAW;

Membri

cbSize

Tipo: DWORD

Dimensioni di questa struttura, in byte.

hWnd

Tipo: HWND

Handle per la finestra che riceve le notifiche associate a un'icona nell'area di notifica.

uID

Tipo: UINT

Identificatore definito dall'applicazione dell'icona della barra delle applicazioni. Shell usa (hWnd più uID) o guidItem per identificare l'icona da utilizzare quando viene richiamata Shell_NotifyIcon. È possibile associare più icone a un singolo hWnd assegnando a ogni diversouID . Se viene specificato guidItem, uID viene ignorato.

uFlags

Tipo: UINT

Flag che indicano quali degli altri membri della struttura contengono dati validi o forniscono informazioni aggiuntive alla descrizione comando su come deve essere visualizzato. Questo membro può essere una combinazione dei valori seguenti:

NIF_MESSAGE (0x00000001)

0x00000001. Il membro uCallbackMessage è valido.

NIF_ICON (0x00000002)

0x00000002. Il membro hIcon è valido.

NIF_TIP (0x00000004)

0x00000004. Il membro szTip è valido.

NIF_STATE (0x00000008)

0x00000008. I membri dwState e dwStateMask sono validi.

NIF_INFO (0x00000010)

0x00000010. Visualizzare una notifica balloon. I membri di szInfo, szInfoTitle, dwInfoFlagse uTimeout sono validi. Si noti che uTimeout è valido solo in Windows 2000 e Windows XP.

  • Per visualizzare la notifica balloon, specificare NIF_INFO e fornire testo in szInfo.
  • Per rimuovere una notifica balloon, specificare NIF_INFO e specificare una stringa vuota tramite szInfo.
  • Per aggiungere un'icona dell'area di notifica senza visualizzare una notifica, non impostare il flag di NIF_INFO.

NIF_GUID (0x00000020)

0x00000020.

  • Windows 7 e versioni successive: l' guidItem è valido.
  • Windows Vista e versioni precedenti: riservato.

NIF_REALTIME (0x00000040)

0x00000040. Windows Vista e versioni successive. Se non è possibile visualizzare immediatamente la notifica balloon, eliminarla. Usa questo flag per le notifiche che rappresentano informazioni in tempo reale che sarebbero inutili o fuorvianti se visualizzate in un secondo momento. Ad esempio, un messaggio che indica che il telefono sta suonando. NIF_REALTIME è significativo solo se combinato con il flag di NIF_INFO.

NIF_SHOWTIP (0x00000080)

0x00000080. Windows Vista e versioni successive. Usare la descrizione comando standard. In genere, quando uVersion è impostato su NOTIFYICON_VERSION_4, la descrizione comando standard viene eliminata e può essere sostituita dall'interfaccia utente popup disegnata dall'applicazione. Se l'applicazione vuole visualizzare la descrizione comando standard con NOTIFYICON_VERSION_4, può specificare NIF_SHOWTIP per indicare che la descrizione comando standard deve essere comunque visualizzata.

uCallbackMessage

Tipo: UINT

Identificatore di messaggio definito dall'applicazione. Il sistema usa questo identificatore per inviare messaggi di notifica alla finestra identificata in hWnd. Questi messaggi di notifica vengono inviati quando si verifica un evento del mouse o il passaggio del mouse nel rettangolo di delimitazione dell'icona, quando l'icona viene selezionata o attivata con la tastiera o quando tali azioni si verificano nella notifica di fumetto.

Quando il membro uVersion è 0 o NOTIFYICON_VERSION, il parametro wParam del messaggio contiene l'identificatore dell'icona della barra delle applicazioni in cui si è verificato l'evento. Questo identificatore può essere di lunghezza di 32 bit. Il parametro lParam contiene il messaggio del mouse o della tastiera associato all'evento. Ad esempio, quando il puntatore si sposta su un'icona della barra delle applicazioni, lParam è impostato su WM_MOUSEMOVE.

Quando il membro uVersion è NOTIFYICON_VERSION_4, le applicazioni continuano a ricevere eventi di notifica sotto forma di messaggi definiti dall'applicazione tramite il membro uCallbackMessage, ma l'interpretazione del lParam e parametri wParam del messaggio vengono modificati come segue:

  • LOWORD(lParam) contiene eventi di notifica, ad esempio NIN_BALLOONSHOW, NIN_POPUPOPEN o WM_CONTEXTMENU.
  • HIWORD(lParam) contiene l'ID icona. Gli ID icona sono limitati a una lunghezza di 16 bit.
  • GET_X_LPARAM(wParam) restituisce la coordinata X per gli eventi di notifica NIN_POPUPOPEN, NIN_SELECT, NIN_KEYSELECT e tutti i messaggi del mouse tra WM_MOUSEFIRST e WM_MOUSELAST. Se uno di questi messaggi viene generato dalla tastiera, wParam viene impostato sull'angolo superiore sinistro dell'icona di destinazione. Per tutti gli altri messaggi, wParam non è definito.
  • GET_Y_LPARAM(wParam) restituisce la coordinata di ancoraggio Y per gli eventi di notifica e i messaggi definiti per l'ancoraggio X.

hIcon

Tipo: hicon

Handle per l'icona da aggiungere, modificare o eliminare. Windows XP e versioni successive supportano icone fino a 32 BPP.

Se viene fornita solo un'icona di 16x16 pixel, viene ridimensionata a dimensioni maggiori in un sistema impostato su un valore DPI elevato. Questo può portare a un risultato non interessante. È consigliabile specificare sia un'icona da 16x16 pixel che un'icona 32x32 nel file di risorse. Usare LoadIconMetric per assicurarsi che l'icona corretta venga caricata e ridimensionata in modo appropriato. Per un esempio di codice, vedere La sezione Osservazioni.

szTip[64]

Tipo: TCHAR[64]

Stringa con terminazione Null che specifica il testo per una descrizione comando standard. Può avere un massimo di 64 caratteri, incluso il carattere Null di terminazione.

Per Windows 2000 e versioni successive, szTip può avere un massimo di 128 caratteri, incluso il carattere Null di terminazione.

szTip[128]

Tipo: TCHAR[64]

Stringa con terminazione Null che specifica il testo per una descrizione comando standard. Può avere un massimo di 64 caratteri, incluso il carattere Null di terminazione.

Per Windows 2000 e versioni successive, szTip può avere un massimo di 128 caratteri, incluso il carattere Null di terminazione.

dwState

Tipo: DWORD

Windows 2000 e versioni successive. Stato dell'icona. Uno o entrambi i valori seguenti:

NIS_HIDDEN (0x00000001)

0x00000001. L'icona è nascosta.

NIS_SHAREDICON (0x00000002)

0x00000002. La risorsa icona viene condivisa tra più icone.

dwStateMask

Tipo: DWORD

Windows 2000 e versioni successive. Valore che specifica i bit del membro dwState vengono recuperati o modificati. I valori possibili sono uguali a quelli per dwState. Ad esempio, l'impostazione di questo membro su NIS_HIDDEN determina la modifica solo dello stato nascosto dell'elemento mentre il bit di condivisione dell'icona viene ignorato indipendentemente dal relativo valore.

szInfo[256]

Tipo: TCHAR[256]

Windows 2000 e versioni successive. Stringa con terminazione Null che specifica il testo da visualizzare in una notifica di fumetto. Può avere un massimo di 256 caratteri, incluso il carattere Null di terminazione, ma deve essere limitato a 200 caratteri in inglese per supportare la localizzazione. Per rimuovere la notifica di fumetto dall'interfaccia utente, eliminare l'icona (con NIM_DELETE) oppure impostare il flag NIF_INFO in uFlags e impostare szInfo su una stringa vuota.

DUMMYUNIONNAME

DUMMYUNIONNAME.uTimeout

Tipo: UINT

Windows 2000 e versioni successive.

Nota Questo membro è deprecato a partire da Windows Vista. Gli orari di visualizzazione delle notifiche sono ora basati sulle impostazioni di accessibilità del sistema.
 
Unione con uVersion. Valore di timeout, espresso in millisecondi, per la notifica. Il sistema applica valori di timeout minimo e massimo. I valori specificati in uTimeout troppo grandi vengono impostati sul valore massimo. Valori troppo piccoli per impostazione predefinita per il valore minimo. I valori di timeout minimo e massimo del sistema sono attualmente impostati rispettivamente a 10 secondi e 30 secondi. Per altre informazioni su uTimeout, vedere la sezione Note.

DUMMYUNIONNAME.uVersion

Tipo: UINT

Windows 2000 e versioni successive. Unione con uTimeout (deprecato a partire da Windows Vista). Specifica la versione dell'interfaccia dell'icona di notifica della shell da usare. Per altre informazioni sulle differenze in queste versioni, vedere Shell_NotifyIcon. Questo membro viene utilizzato solo quando si utilizza Shell_NotifyIcon per inviare un messaggio di NIM_SETVERSION.

szInfoTitle[64]

Tipo: TCHAR[64]

Windows 2000 e versioni successive. Stringa con terminazione Null che specifica un titolo per una notifica di fumetto. Questo titolo viene visualizzato in un tipo di carattere più grande immediatamente sopra il testo. Può avere un massimo di 64 caratteri, incluso il carattere Null di terminazione, ma deve essere limitato a 48 caratteri in inglese per supportare la localizzazione.

dwInfoFlags

Tipo: DWORD

Windows 2000 e versioni successive. Flag che possono essere impostati per modificare il comportamento e l'aspetto di una notifica di fumetto. L'icona viene posizionata a sinistra del titolo. Se il membro szInfoTitle è di lunghezza zero, l'icona non viene visualizzata.

NIIF_NONE (0x00000000)

0x00000000. Nessuna icona.

NIIF_INFO (0x00000001)

0x00000001. Icona informazioni.

NIIF_WARNING (0x00000002)

0x00000002. Icona di avviso.

NIIF_ERROR (0x00000003)

0x00000003. Icona di errore.

NIIF_USER (0x00000004)

0x00000004. Windows XP SP2 e versioni successive.

  • windows XP: usare l'icona identificata in hIcon come icona del titolo dell'area di notifica.
  • Windows Vista e versioni successive: usare l'icona identificata in hBalloonIcon come icona del titolo dell'area di notifica.

NIIF_NOSOUND (0x00000010)

0x00000010. Windows XP e versioni successive. Non riprodurre il suono associato. Si applica solo alle notifiche.

NIIF_LARGE_ICON (0x00000020)

0x00000020. Windows Vista e versioni successive. La versione grande dell'icona deve essere usata come icona di notifica. Corrisponde all'icona con dimensioni SM_CXICON x SM_CYICON. Se questo flag non è impostato, viene utilizzata l'icona con dimensioni SM_CXSMICON x SM_CYSMICON.

  • Questo flag può essere usato con tutte le icone stock.
  • Le applicazioni che usano icone personalizzate meno recenti (NIIF_USER con hIcon) devono fornire una nuova versione SM_CXICON x SM_CYICON nell'icona del vassoio (hIcon). Queste icone vengono ridimensionate quando vengono visualizzate nella barra di sistema o nell'area sca (System Control Area).
  • Le nuove icone personalizzate (NIIF_USER con hBalloonIcon) devono fornire una versione SM_CXICON x SM_CYICON nell'icona fornita (hBalloonIcon).

NIIF_RESPECT_QUIET_TIME (0x00000080)

0x00000080. Windows 7 e versioni successive. Non visualizzare la notifica balloon se l'utente corrente è in "tempo di silenzio", ovvero la prima ora dopo che un nuovo utente accede al suo account per la prima volta. Durante questo periodo, la maggior parte delle notifiche non deve essere inviata o visualizzata. Ciò consente a un utente di diventare abituato a un nuovo sistema informatico senza distrazioni. Il tempo di quiete si verifica anche per ogni utente dopo un aggiornamento o un'installazione pulita del sistema operativo. Una notifica inviata con questo flag durante il tempo non è in coda; viene semplicemente ignorato. L'applicazione può inviare nuovamente la notifica in un secondo momento se è ancora valida in quel momento.

Poiché un'applicazione non è in grado di prevedere quando potrebbe verificarsi un tempo di inattività, è consigliabile impostare questo flag sempre su tutte le notifiche appropriate da parte di qualsiasi applicazione che significa rispettare il tempo di quiete.

Durante il tempo di silenzio, alcune notifiche devono comunque essere inviate perché sono previste dall'utente come feedback in risposta a un'azione dell'utente, ad esempio quando collega un dispositivo USB o stampa un documento.

Se l'utente corrente non è in modalità non interattiva, questo flag non ha alcun effetto.

NIIF_ICON_MASK (0x0000000F)

0x0000000F. Windows XP e versioni successive. Riservato.

guidItem

Tipo: GUID

Windows XP e versioni successive.

  • Windows 7 e versioni successive: GUID registrato che identifica l'icona. Questo valore esegue l'override uID ed è il metodo consigliato per identificare l'icona. Il flag NIF_GUID deve essere impostato nel membro uFlags.
  • Windows XP e Windows Vista: riservato; deve essere impostato su 0.
Se l'applicazione deve essere eseguita sia in Windows Vista che in Windows 7, è fondamentale controllare la versione di Windows e specificare solo un guidItem diverso da zero se in Windows 7 o versione successiva.

Se si identifica l'icona di notifica con un GUID in una chiamata a Shell_NotifyIcon, è necessario usare lo stesso GUID per identificare l'icona in tutte le successive Shell_NotifyIcon chiamate che gestiscono la stessa icona.

Per generare un GUID da usare in questo membro, usare uno strumento di generazione GUID, ad esempio Guidgen.exe.

hBalloonIcon

Tipo: hicon

Windows Vista e versioni successive. Handle di un'icona di notifica personalizzata fornita dall'applicazione che deve essere usata indipendentemente dall'icona dell'area di notifica. Se questo membro è diverso da NULL e il flag NIIF_USER viene impostato nel membro dwInfoFlags, questa icona viene usata come icona di notifica. Se questo membro è NULL, viene eseguito il comportamento legacy.

Osservazioni

Per altre informazioni sulle procedure consigliate per l'interfaccia utente e il contenuto, vedere Notifiche nelle Linee guida per l'interazione dell'esperienza utente di Windows.

Se si imposta il flag NIF_INFO nel membro uFlags, viene usata la notifica in stile fumetto. Per altre informazioni su queste notifiche, vedere descrizione comando Balloon.

Non è possibile visualizzare più notifiche di fumetto alla volta per la barra delle applicazioni. Se un'applicazione tenta di visualizzare una notifica quando ne viene già visualizzata una, la nuova notifica viene accodata e visualizzata quando la notifica precedente viene rimossa. Nelle versioni di Windows precedenti a Windows Vista, la nuova notifica non viene visualizzata fino a quando la notifica esistente non è stata visibile per almeno la durata minima del timeout di sistema, indipendentemente dal valore di uTimeout della notifica originale. Se l'utente non sembra usare il computer, il sistema non conta questa volta per il timeout.

Diversi membri di questa struttura sono supportati solo per Windows 2000 e versioni successive. Per abilitare questi membri, includere una delle righe seguenti nell'intestazione:

// Windows Vista and later:
#define NTDDI_VERSION NTDDI_WIN2K
#define NTDDI_VERSION NTDDI_WINXP
#define NTDDI_VERSION NTDDI_VISTA

// Windows XP and earlier:
#define _WIN32_IE 0x0500

Si noti che è necessario inizializzare la struttura con le relative dimensioni. Se si usano le dimensioni della struttura attualmente definita, l'applicazione potrebbe non essere eseguita con versioni precedenti di Shell32.dll, che prevedono una struttura più piccola. È possibile eseguire l'applicazione in versioni precedenti di Shell32.dll definendo il numero di versione appropriato .vedere Shell e Common Controls Versions). Tuttavia, questo potrebbe causare problemi se l'applicazione deve essere eseguita anche in sistemi più recenti.

È possibile mantenere la compatibilità delle applicazioni con tutte le versioni Shell32.dll mentre si usano ancora i file di intestazione correnti impostando in modo appropriato le dimensioni della struttura NOTIFYICONDATA. Prima di inizializzare la struttura, usare dllGetVersion per determinare quale versione Shell32.dll è installata nel sistema e inizializzare cbSize con uno di questi valori:

versione Shell32.dll cbSize
6.0.6 o versione successiva (Windows Vista e versioni successive) sizeof(NOTIFYICONDATA)
6.0 (Windows XP) NOTIFYICONDATA_V3_SIZE
5.0 (Windows 2000) NOTIFYICONDATA_V2_SIZE
Versioni inferiori alla 5.0 NOTIFYICONDATA_V1_SIZE
 

L'uso di questo valore per cbSize consente all'applicazione di usare NOTIFYICONDATA in un metodo compatibile con le versioni precedenti di Shell32.dll.

Nell'esempio di codice seguente viene illustrato il controllo della versione che consente di abilitare un'applicazione che usa il membro guidItem per l'esecuzione sia in Windows Vista che in Windows 7. Fornisce una funzione booleana che restituisce TRUE se il sistema operativo è Windows 7. A meno che questo membro non restituisca TRUE, il membro guidItem deve essere impostato su 0.

Nota Questo codice è specifico del numero di versione di Windows 7. È previsto che le versioni future di Windows e Windows Server supportino il membro guidItem e in quel momento questo codice deve essere aggiornato per identificare anche i numeri di versione successivi validi.
 
BOOL IsWin7OrLater()
{
    // Initialize the OSVERSIONINFOEX structure.
    OSVERSIONINFOEX osvi;
    ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
    osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
    osvi.dwMajorVersion = 6;
    osvi.dwMinorVersion = 1;

    // Initialize the condition mask.
    DWORDLONG dwlConditionMask = 0;
    VER_SET_CONDITION(dwlConditionMask, VER_MAJORVERSION, VER_GREATER_EQUAL);
    VER_SET_CONDITION(dwlConditionMask, VER_MINORVERSION, VER_GREATER_EQUAL);

    // Perform the test.
    return VerifyVersionInfo(&osvi, 
                             VER_MAJORVERSION | VER_MINORVERSION,
                             dwlConditionMask);
}

Nell'esempio di codice seguente viene illustrato l'uso di LoadIconMetric per caricare un'icona da usare con valori DPI elevati.

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

risoluzione dei problemi di

Se si usa il membro guidItem per identificare l'icona e tale icona non viene visualizzata o alcune chiamate a Shell_NotifyIcon hanno esito negativo, uno dei casi seguenti è la causa probabile:
  1. Il flag NIF_GUID non è stato impostato in ogni chiamata a Shell_NotifyIcon. Dopo aver identificato l'icona di notifica con un GUID in una chiamata a Shell_NotifyIcon, è necessario usare lo stesso GUID per identificare l'icona in qualsiasi Shell_NotifyIcon chiamate successive che gestiscono la stessa icona.
  2. Il file binario che contiene l'icona è stato spostato. Il percorso del file binario è incluso nella registrazione del GUID dell'icona e non può essere modificato. Le impostazioni associate all'icona vengono mantenute tramite un aggiornamento solo se il percorso del file e il GUID sono invariati. Se il percorso deve essere modificato, l'applicazione deve rimuovere tutte le informazioni GUID aggiunte al momento della registrazione dell'icona esistente. Dopo aver rimosso le informazioni, è possibile spostare il file binario in un nuovo percorso e registrarlo nuovamente con un nuovo GUID. Tutte le impostazioni associate alla registrazione GUID originale andranno perse.

    Ciò si verifica anche nel caso di un'installazione side-by-side. Quando si tratta di un'installazione side-by-side, le nuove versioni dell'applicazione devono aggiornare il GUID del file binario.

    Nota L'unica eccezione a un file spostato si verifica quando i file binari originali e spostati sono Authenticodefirmato dalla stessa società. In tal caso, le impostazioni vengono mantenute tramite lo spostamento.
     

Nota

L'intestazione shellapi.h definisce NOTIFYICONDATA come alias che seleziona automaticamente la versione ANSI o Unicode di questa funzione in base alla definizione della costante del preprocessore UNICODE. La combinazione dell'utilizzo dell'alias indipendente dalla codifica con il codice non indipendente dalla codifica può causare mancate corrispondenze che generano errori di compilazione o di runtime. Per altre informazioni, vedere convenzioni di per i prototipi di funzioni.

Fabbisogno

Requisito Valore
client minimo supportato Windows XP [solo app desktop]
server minimo supportato Windows 2000 Server [solo app desktop]
intestazione shellapi.h

Vedere anche

Notifiche e area di notifica