Shell_NotifyIconA 函数 (shellapi.h)

将消息发送到任务栏的状态区域。

语法

BOOL Shell_NotifyIconA(
  [in] DWORD            dwMessage,
  [in] PNOTIFYICONDATAA lpData
);

参数

[in] dwMessage

类型:DWORD

一个值,该值指定要由此函数执行的操作。 它可以具有以下值之一:

NIM_ADD(0x00000000)

0x00000000。 将图标添加到状态区域。 该图标在 NOTIFYICONDATA 结构中提供标识符,该结构通过 lpdata(通过 uIDguidItem 成员指向)。 此标识符用于后续调用 Shell_NotifyIcon 以对图标执行后续操作。

NIM_MODIFY(0x00000001)

0x00000001。 修改状态区域中的图标。 NOTIFYICONDATA 结构,lpdata 使用最初分配给图标的 ID 添加到通知区域(NIM_ADD)以标识要修改的图标。

NIM_DELETE(0x00000002)

0x00000002。 从状态区域删除图标。 lpdata 指向的 NOTIFYICONDATA 结构使用最初添加到通知区域(NIM_ADD)时分配给图标的 ID 来标识要删除的图标。

NIM_SETFOCUS(0x00000003)

0x00000003。 Shell32.dll 版本 5.0 及更高版本仅。 将焦点返回到任务栏通知区域。 通知区域图标在完成 UI 操作后应使用此消息。 例如,如果图标显示快捷菜单,但用户按 ESC 将其取消,请使用 NIM_SETFOCUS 将焦点返回到通知区域。

NIM_SETVERSION(0x00000004)

0x00000004。 Shell32.dll 版本 5.0 及更高版本仅。 指示通知区域根据 uVersion 成员 lpdata所指向的结构的版本号行事。 版本号指定识别哪些成员。

每次添加通知区域图标(NIM_ADD)时,都必须调用NIM_SETVERSION。 无需使用NIM_MODIFY调用它。 用户注销后,不会保留版本设置。

有关详细信息,请参阅“备注”部分。

[in] lpData

类型:PNOTIFYICONDATA

指向 NOTIFYICONDATA 结构的指针。 结构的内容取决于 dwMessage的值。 它可以定义要添加到通知区域的图标、导致该图标显示通知或标识要修改或删除的图标。

返回值

类型:BOOL

如果成功,则返回 TRUE;否则返回 FALSE。 如果 dwMessage 设置为 NIM_SETVERSION,则函数在成功更改版本时返回 TRUE;如果不支持请求的版本,则返回 false FALSE。

言论

自 Windows 2000(Shell32.dll 版本 5.0)起,如果设置 NOTIFYICONDATA 结构 u Version 成员,lpdata 指向NOTIFYICON_VERSION_4或更高版本,Shell_NotifyIcon 鼠标和键盘事件处理方式与早期版本的 Windows 不同。 区别包括:

  • 如果用户使用键盘选择通知图标的快捷菜单,Shell 现在会向关联的应用程序发送一条 WM_CONTEXTMENU 消息。 早期版本发送 WM_RBUTTONDOWNWM_RBUTTONUP 消息。
  • 如果用户使用键盘选择通知图标并使用空格键或 ENTER 键激活它,版本 5.0 Shell 会向关联的应用程序发送NIN_KEYSELECT通知。 早期版本发送 WM_RBUTTONDOWNWM_RBUTTONUP 消息。
  • 如果用户选择带有鼠标的通知图标并使用 ENTER 键激活它,Shell 现在会向关联的应用程序发送NIN_SELECT通知。 早期版本发送 WM_RBUTTONDOWNWM_RBUTTONUP 消息。
从 Windows XP(Shell32.dll 版本 6.0),如果用户将鼠标指针传递到与之关联的气球通知的图标上,Shell 将发送以下消息:
  • NIN_BALLOONSHOW。 显示气球时发送(气球排队)。
  • NIN_BALLOONHIDE。 气球消失时发送。 例如,删除图标时。 如果气球因超时或用户单击鼠标而关闭,则不会发送此消息。

    从 Windows 7 开始,当设置 NIIF_RESPECT_QUIET_TIME 标志的通知尝试在安静时间(新计算机上的第一小时)时,也会发送NIN_BALLOONHIDE。 在这种情况下,气球根本不显示。

  • NIN_BALLOONTIMEOUT。 由于超时而关闭气球时发送。
  • NIN_BALLOONUSERCLICK。 关闭气球时发送,因为用户单击了鼠标。
除了这些消息(从 Windows Vista(Shell32.dll 版本 6.0.6)开始,如果用户将鼠标指针传递到与之关联的气球通知的图标上,Windows Vista Shell 还会添加以下消息:
  • NIN_POPUPOPEN。 当用户将光标悬停在图标上以指示应使用更丰富的弹出 UI 来代替标准文本工具提示时发送。
  • NIN_POPUPCLOSE。 当光标不再悬停在图标上以指示应关闭丰富的弹出 UI 时发送。
无论操作系统版本如何,都可以通过调用 dwMessage 设置为 NIM_SETVERSION调用 Shell_NotifyIcon 来选择 Shell 的行为方式。 设置由 lpdata 指向的 NOTIFYICONDATA 成员的 uVersion 成员,以指示是希望 Windows 2000、Windows Vista 还是预版本 5.0 (Windows 95) 行为。
注意 上述消息不是传统的 Windows 消息。 它们作为应用程序定义消息的 lParam 值发送,uCallbackMessageNOTIFYICONDATA 结构的成员中指定的 lpdatadwMessage中设置 NIM_ADD 标志时调用 Shell_NotifyIcon
 
从 Windows XP Service Pack 2(SP2 开始),可以在通知气球中显示自定义图标。 这样,调用过程就可以自定义通知超出以前可用的信息、警告和错误选项,并将其与用户其他类型的通知区分开来。

注意

shellapi.h 标头将Shell_NotifyIcon定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的 约定。

要求

要求 价值
最低支持的客户端 Windows XP [仅限桌面应用]
支持的最低服务器 Windows 2000 Server [仅限桌面应用]
目标平台 窗户
标头 shellapi.h
Shell32.lib
DLL Shell32.dll(版本 4.0 或更高版本)
API 集 ext-ms-win-shell-shell32-l1-2-1(在 Windows 10 版本 10.0.10240 中引入)

另请参阅

通知和通知区域