Estructura NOTIFYICONDATAA (shellapi.h)
Contiene información que el sistema necesita para mostrar las notificaciones en el área de notificación. Usado por Shell_NotifyIcon.
Sintaxis
typedef struct _NOTIFYICONDATAA {
DWORD cbSize;
HWND hWnd;
UINT uID;
UINT uFlags;
UINT uCallbackMessage;
HICON hIcon;
#if ...
CHAR szTip[64];
#else
CHAR szTip[128];
#endif
DWORD dwState;
DWORD dwStateMask;
CHAR szInfo[256];
union {
UINT uTimeout;
UINT uVersion;
} DUMMYUNIONNAME;
CHAR szInfoTitle[64];
DWORD dwInfoFlags;
GUID guidItem;
HICON hBalloonIcon;
} NOTIFYICONDATAA, *PNOTIFYICONDATAA;
Miembros
cbSize
Tipo: DWORD de
Tamaño de esta estructura, en bytes.
hWnd
Tipo: HWND
Identificador de la ventana que recibe notificaciones asociadas a un icono en el área de notificación.
uID
Tipo: UINT
Identificador definido por la aplicación del icono de la barra de tareas. Shell usa (hWnd más uID) o guidItem para identificar en qué icono se debe operar cuando se invoca Shell_NotifyIcon. Puede tener varios iconos asociados a un único hWnd asignando cada uno de ellos un uID diferente. Si se especifica guidItem, se omite uID.
uFlags
Tipo: UINT
Marcas que indican cuál de los otros miembros de la estructura contienen datos válidos o proporcionan información adicional a la información sobre herramientas sobre cómo se debe mostrar. Este miembro puede ser una combinación de los siguientes valores:
NIF_MESSAGE (0x00000001)
0x00000001. El miembro
NIF_ICON (0x00000002)
0x00000002. El miembro
NIF_TIP (0x00000004)
0x00000004. El miembro szTip es válido.
NIF_STATE (0x00000008)
0x00000008. Los miembros de dwState y dwStateMask son válidos.
NIF_INFO (0x00000010)
0x00000010. Muestra una notificación de globo. Los szInfo, szInfoTitle, dwInfoFlagsy miembros de uTimeout son válidos. Tenga en cuenta que uTimeout solo es válido en Windows 2000 y Windows XP.
- Para mostrar la notificación de globo, especifique NIF_INFO y proporcione texto en szInfo.
- Para quitar una notificación de globo, especifique NIF_INFO y proporcione una cadena vacía a través de szInfo.
- Para agregar un icono de área de notificación sin mostrar una notificación, no establezca la marca NIF_INFO.
NIF_GUID (0x00000020)
0x00000020.
Windows 7 y versiones posteriores : el guidItem dees válido. - Windows Vista y versiones anteriores: Reservado.
NIF_REALTIME (0x00000040)
0x00000040. Windows Vista y versiones posteriores. Si la notificación de globo no se puede mostrar inmediatamente, descárchala. Use esta marca para las notificaciones que representan información en tiempo real que sería insignificante o engañosa si se muestra en un momento posterior. Por ejemplo, un mensaje que indica "El teléfono está sonando". NIF_REALTIME solo es significativo cuando se combina con la marca NIF_INFO.
NIF_SHOWTIP (0x00000080)
0x00000080. Windows Vista y versiones posteriores. Use la información sobre herramientas estándar. Normalmente, cuando uVersion se establece en NOTIFYICON_VERSION_4, se suprime la información sobre herramientas estándar y se puede reemplazar por la interfaz de usuario emergente dibujada por la aplicación. Si la aplicación quiere mostrar la información sobre herramientas estándar con NOTIFYICON_VERSION_4, puede especificar NIF_SHOWTIP para indicar que se debe seguir mostrando la información sobre herramientas estándar.
uCallbackMessage
Tipo: UINT
Identificador de mensaje definido por la aplicación. El sistema usa este identificador para enviar mensajes de notificación a la ventana identificada en hWnd. Estos mensajes de notificación se envían cuando se produce un evento del mouse o el puntero en el rectángulo delimitador del icono, cuando el icono está seleccionado o activado con el teclado, o cuando esas acciones se producen en la notificación de globo.
Cuando el miembro uVersion es 0 o NOTIFYICON_VERSION, el parámetro wParam del mensaje contiene el identificador del icono de la barra de tareas en el que se produjo el evento. Este identificador puede tener una longitud de 32 bits. El parámetro lParam contiene el mensaje del mouse o del teclado asociado al evento. Por ejemplo, cuando el puntero se mueve sobre un icono de barra de tareas, lParam se establece en WM_MOUSEMOVE.
Cuando el miembro uVersion
- LOWORD(lParam) contiene eventos de notificación, como NIN_BALLOONSHOW, NIN_POPUPOPEN o WM_CONTEXTMENU.
- HIWORD(lParam) contiene el identificador de icono. Los identificadores de icono están restringidos a una longitud de 16 bits.
- GET_X_LPARAM(wParam) devuelve la coordenada de anclaje X para los eventos de notificación NIN_POPUPOPEN, NIN_SELECT, NIN_KEYSELECT y todos los mensajes del mouse entre WM_MOUSEFIRST y WM_MOUSELAST. Si el teclado genera alguno de esos mensajes, wParam se establece en la esquina superior izquierda del icono de destino. Para todos los demás mensajes, wParam no está definido.
- GET_Y_LPARAM(wParam) devuelve la coordenada de delimitador Y para los eventos y mensajes de notificación tal como se define para el delimitador X.
hIcon
Tipo:
Identificador del icono que se va a agregar, modificar o eliminar. Windows XP y versiones posteriores admiten iconos de hasta 32 BPP.
Si solo se proporciona un icono de 16 x 16 píxeles, se escala a un tamaño mayor en un sistema establecido en un valor de ppp alto. Esto puede dar lugar a un resultado no atractivo. Se recomienda proporcionar un icono de 16 x 16 píxeles y un icono de 32 x 32 en el archivo de recursos. Use LoadIconMetric para asegurarse de que el icono correcto se carga y se escala correctamente. Vea Comentarios para obtener un ejemplo de código.
szTip[64]
Tipo: TCHAR[64]
Cadena terminada en NULL que especifica el texto de una información sobre herramientas estándar. Puede tener un máximo de 64 caracteres, incluido el carácter nulo de terminación.
Para Windows 2000 y versiones posteriores, szTip puede tener un máximo de 128 caracteres, incluido el carácter nulo de terminación.
szTip[128]
Tipo: TCHAR[64]
Cadena terminada en NULL que especifica el texto de una información sobre herramientas estándar. Puede tener un máximo de 64 caracteres, incluido el carácter nulo de terminación.
Para Windows 2000 y versiones posteriores, szTip puede tener un máximo de 128 caracteres, incluido el carácter nulo de terminación.
dwState
Tipo: DWORD de
Windows 2000 y versiones posteriores. Estado del icono. Uno o ambos de los siguientes valores:
NIS_HIDDEN (0x00000001)
0x00000001. El icono está oculto.
NIS_SHAREDICON (0x00000002)
0x00000002. El recurso de icono se comparte entre varios iconos.
dwStateMask
Tipo: DWORD de
Windows 2000 y versiones posteriores. Valor que especifica qué bits del miembro dwState se recuperan o modifican. Los valores posibles son los mismos que los de dwState. Por ejemplo, establecer este miembro en NIS_HIDDEN hace que solo se modifique el estado oculto del elemento mientras se omite el bit de uso compartido de iconos independientemente de su valor.
szInfo[256]
Tipo: TCHAR[256]
Windows 2000 y versiones posteriores. Cadena terminada en null que especifica el texto que se va a mostrar en una notificación de globo. Puede tener un máximo de 256 caracteres, incluido el carácter nulo de terminación, pero debe restringirse a 200 caracteres en inglés para dar cabida a la localización. Para quitar la notificación de globo de la interfaz de usuario, elimine el icono (con NIM_DELETE) o establezca la marca de NIF_INFO en uFlags y establezca szInfo en una cadena vacía.
DUMMYUNIONNAME
DUMMYUNIONNAME.uTimeout
Tipo: UINT
Windows 2000 y versiones posteriores.
DUMMYUNIONNAME.uVersion
Tipo: UINT
Windows 2000 y versiones posteriores. Unión con uTimeout (en desuso a partir de Windows Vista). Especifica la versión de la interfaz del icono de notificación de Shell que se debe usar. Para obtener más información sobre las diferencias en estas versiones, vea Shell_NotifyIcon. Este miembro solo se emplea cuando se usa Shell_NotifyIcon para enviar un mensaje de NIM_SETVERSION.
szInfoTitle[64]
Tipo: TCHAR[64]
Windows 2000 y versiones posteriores. Cadena terminada en NULL que especifica un título para una notificación de globo. Este título aparece en una fuente más grande justo encima del texto. Puede tener un máximo de 64 caracteres, incluido el carácter nulo de terminación, pero debe restringirse a 48 caracteres en inglés para dar cabida a la localización.
dwInfoFlags
Tipo: DWORD de
Windows 2000 y versiones posteriores. Marcas que se pueden establecer para modificar el comportamiento y la apariencia de una notificación de globo. El icono se coloca a la izquierda del título. Si el miembro szInfoTitle es de longitud cero, no se muestra el icono.
NIIF_NONE (0x00000000)
0x00000000. Sin icono.
NIIF_INFO (0x00000001)
0x00000001. Icono de información.
NIIF_WARNING (0x00000002)
0x00000002. Icono de advertencia.
NIIF_ERROR (0x00000003)
0x00000003. Icono de error.
NIIF_USER (0x00000004)
0x00000004. Windows XP SP2 y versiones posteriores.
- windows XP: use el icono identificado en hIcon como icono de título del globo de notificación.
- Windows Vista y versiones posteriores: use el icono identificado en hBalloonIconIcon como icono de título del globo de notificación.
NIIF_NOSOUND (0x00000010)
0x00000010. Windows XP y versiones posteriores. No reproduzca el sonido asociado. Solo se aplica a las notificaciones.
NIIF_LARGE_ICON (0x00000020)
0x00000020. Windows Vista y versiones posteriores. La versión grande del icono debe usarse como icono de notificación. Esto corresponde al icono con dimensiones SM_CXICON x SM_CYICON. Si no se establece esta marca, se usa el icono con dimensiones SM_CXSMICON x SM_CYSMICON.
- Esta marca se puede usar con todos los iconos de stock de .
- Las aplicaciones que usan iconos personalizados más antiguos (NIIF_USER con hIcon) deben proporcionar una nueva versión de SM_CXICON x SM_CYICON en el icono de bandeja (hIcon). Estos iconos se reducen verticalmente cuando se muestran en la bandeja del sistema o en el área de control del sistema (SCA).
- Los nuevos iconos personalizados (NIIF_USER con hBalloonIcon) deben proporcionar una versión de SM_CXICON x SM_CYICON en el icono proporcionado (hBalloonIcon).
NIIF_RESPECT_QUIET_TIME (0x00000080)
0x00000080. Windows 7 y versiones posteriores. No muestre la notificación de globo si el usuario actual está en "tiempo tranquilo", que es la primera hora después de que un nuevo usuario inicie sesión en su cuenta por primera vez. Durante este tiempo, la mayoría de las notificaciones no se deben enviar ni mostrar. Esto permite a un usuario acostumbrarse a un nuevo sistema informático sin esas distracciones. El tiempo de silencio también se produce para cada usuario después de una actualización del sistema operativo o una instalación limpia. No se pone en cola una notificación enviada con esta marca durante el tiempo silencioso; simplemente se descarta sin mostrar. La aplicación puede volver a enviar la notificación más adelante si sigue siendo válida en ese momento.
Dado que una aplicación no puede predecir cuándo podría encontrarse con un tiempo silencioso, se recomienda que esta marca siempre se establezca en todas las notificaciones adecuadas por cualquier aplicación que significa respetar el tiempo silencioso.
Durante el tiempo de silencio, el usuario debe seguir enviando determinadas notificaciones porque el usuario espera como comentarios en respuesta a una acción del usuario, por ejemplo, cuando conecta un dispositivo USB o imprime un documento.
Si el usuario actual no está en tiempo silencioso, esta marca no tiene ningún efecto.
NIIF_ICON_MASK (0x0000000F)
0x0000000F. Windows XP y versiones posteriores. Reservado.
guidItem
Tipo: GUID de
Windows XP y versiones posteriores.
-
Windows 7 y versiones posteriores: UN GUID registrado que identifica el icono. Este valor invalida uID y es el método recomendado para identificar el icono. La marca NIF_GUID debe establecerse en el miembro
uFlags. - Windows XP y Windows Vista: Reservado; debe establecerse en 0.
Si identifica el icono de notificación con un GUID en una llamada a Shell_NotifyIcon, debe usar ese mismo GUID para identificar el icono en las llamadas de Shell_NotifyIcon posteriores que tratan con ese mismo icono.
Para generar un GUID para su uso en este miembro, use una herramienta de generación de GUID como Guidgen.exe.
hBalloonIcon
Tipo:
Windows Vista y versiones posteriores. Identificador de un icono de notificación personalizado proporcionado por la aplicación que se debe usar independientemente del icono del área de notificación. Si este miembro no es NULL y la marca NIIF_USER se establece en el miembro dwInfoFlags, este icono se usa como icono de notificación. Si este miembro es NULL, se lleva a cabo el comportamiento heredado.
Observaciones
Consulte "Notificaciones" en las Directrices de interacción de la experiencia del usuario de Windows para obtener más información sobre la interfaz de usuario de notificación y los procedimientos recomendados de contenido.
Si establece la marca NIF_INFO en el miembro uFlags, se usa la notificación de estilo globo. Para obtener más información sobre estas notificaciones, consulte información sobre herramientas globo.
No se puede mostrar más de una notificación de globo a la vez para la barra de tareas. Si una aplicación intenta mostrar una notificación cuando ya se muestra una, la nueva notificación se pone en cola y se muestra cuando la notificación anterior desaparece. En versiones de Windows antes de Windows Vista, la nueva notificación no aparecería hasta que la notificación existente se haya visible durante al menos la longitud mínima de tiempo de espera del sistema, independientemente del valor de uTimeout de la notificación original. Si el usuario no parece usar el equipo, el sistema no cuenta este tiempo para el tiempo de espera.
Varios miembros de esta estructura solo se admiten para Windows 2000 y versiones posteriores. Para habilitar estos miembros, incluya una de las siguientes líneas en el encabezado:
// 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
Tenga en cuenta que debe inicializar la estructura con su tamaño. Si usa el tamaño de la estructura definida actualmente, es posible que la aplicación no se ejecute con versiones anteriores de Shell32.dll, que esperan una estructura más pequeña. Puede ejecutar la aplicación en versiones anteriores de Shell32.dll definiendo el número de versión adecuado (consulte Shell y Versiones de controles comunes). Sin embargo, esto puede causar problemas si la aplicación también necesita ejecutarse en sistemas más recientes.
Puede mantener la compatibilidad de aplicaciones con todas las versiones de Shell32.dll mientras sigue usando los archivos de encabezado actuales estableciendo el tamaño del NOTIFYICONDATA estructura apropiadamente. Antes de inicializar la estructura, use DllGetVersion para determinar qué versión de Shell32.dll está instalada en el sistema e inicializar cbSize con uno de estos valores:
versión de Shell32.dll | cbSize |
---|---|
6.0.6 o posterior (Windows Vista y versiones posteriores) | sizeof(NOTIFYICONDATA) |
6.0 (Windows XP) | NOTIFYICONDATA_V3_SIZE |
5.0 (Windows 2000) | NOTIFYICONDATA_V2_SIZE |
Versiones inferiores a la 5.0 | NOTIFYICONDATA_V1_SIZE |
El uso de este valor para cbSize permite a la aplicación usar NOTIFYICONDATA en un método compatible con versiones anteriores de Shell32.dll.
En el ejemplo de código siguiente se muestra la comprobación de versiones que puede habilitar una aplicación que usa el miembro guidItem para ejecutarse en Windows Vista y Windows 7. Proporciona una función booleana que devuelve TRUE si el sistema operativo es Windows 7. A menos que este miembro devuelva TRUE, el miembro guidItem debe establecerse en 0.
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);
}
En el ejemplo de código siguiente se muestra el uso de LoadIconMetric para cargar un icono para su uso con valores altos de PPP.
// 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;
Solución de problemas de
Si usa el miembro guidItem para identificar el icono y ese icono no se ve o se produce un error en algunas llamadas a Shell_NotifyIcon, uno de los siguientes casos es la causa probable:- La marca NIF_GUID no se estableció en todas las llamadas a Shell_NotifyIcon. Una vez que identifique el icono de notificación con un GUID en una llamada a Shell_NotifyIcon, debe usar ese mismo GUID para identificar el icono en cualquier llamada posterior Shell_NotifyIcon que trate con ese mismo icono.
-
El archivo binario que contiene el icono se movió. La ruta de acceso del archivo binario se incluye en el registro del GUID del icono y no se puede cambiar. La configuración asociada al icono se conserva a través de una actualización solo si la ruta de acceso del archivo y el GUID no se modifican. Si se debe cambiar la ruta de acceso, la aplicación debe quitar cualquier información GUID que se agregó cuando se registró el icono existente. Una vez quitada esa información, puede mover el archivo binario a una nueva ubicación y volver a registrarla con un nuevo GUID. Se perderá cualquier configuración asociada al registro guid original.
Esto también ocurre en el caso de una instalación en paralelo. Cuando se trabaja con una instalación en paralelo, las nuevas versiones de la aplicación deben actualizar el GUID del archivo binario.
Nota La única excepción a un archivo movido se produce cuando los archivos binarios originales y movidos se Authenticodefirmados por la misma empresa. En ese caso, la configuración se conserva a través del movimiento.
Nota
El encabezado shellapi.h define NOTIFYICONDATA como alias que selecciona automáticamente la versión ANSI o Unicode de esta función en función de la definición de la constante de preprocesador UNICODE. La combinación del uso del alias neutral de codificación con código que no es neutral de codificación puede dar lugar a errores de coincidencia que dan lugar a errores de compilación o tiempo de ejecución. Para obtener más información, vea Conventions for Function Prototypes.
Requisitos
Requisito | Valor |
---|---|
cliente mínimo admitido | Windows XP [solo aplicaciones de escritorio] |
servidor mínimo admitido | Windows 2000 Server [solo aplicaciones de escritorio] |
encabezado de |
shellapi.h |
Consulte también
Notificaciones de y el área de notificaciones