SHChangeNotify 函数 (shlobj_core.h)

通知系统应用程序已执行的事件。 如果应用程序执行可能影响 Shell 的操作,则应使用此函数。

语法

void SHChangeNotify(
                 LONG    wEventId,
                 UINT    uFlags,
  [in, optional] LPCVOID dwItem1,
  [in, optional] LPCVOID dwItem2
);

参数

wEventId

类型: LONG

描述已发生的事件。 通常,一次只指定一个事件。 如果指定了多个事件,则 dwItem1dwItem2 参数中包含的值对于所有指定事件必须分别相同。 此参数可能是以下一个或多个值:

SHCNE_ALLEVENTS

所有事件都已发生。

SHCNE_ASSOCCHANGED

文件类型关联已更改。 必须在uFlags 参数中指定SHCNF_IDLIST。 不使用 dwItem1dwItem2,必须为 NULL。 还应为已注册的协议发送此事件。

SHCNE_ATTRIBUTES

项目或文件夹的属性已更改。 必须在uFlags 中指定SHCNF_IDLIST或SHCNF_PATHdwItem1 包含已更改的项目或文件夹。 未使用 dwItem2,应为 NULL

SHCNE_CREATE

已创建非文件夹项。 必须在uFlags 中指定SHCNF_IDLIST或SHCNF_PATHdwItem1 包含已创建的项。 未使用 dwItem2,应为 NULL

SHCNE_DELETE

已删除非文件夹项。 必须在uFlags 中指定SHCNF_IDLIST或SHCNF_PATHdwItem1 包含已删除的项。 未使用 dwItem2,应为 NULL

SHCNE_DRIVEADD

已添加驱动器。 必须在uFlags 中指定SHCNF_IDLIST或SHCNF_PATHdwItem1 包含已添加的驱动器的根。 未使用 dwItem2,应为 NULL

SHCNE_DRIVEADDGUI

Windows XP 及更高版本:未使用。

SHCNE_DRIVEREMOVED

已删除驱动器。 必须在uFlags 中指定SHCNF_IDLIST或SHCNF_PATHdwItem1 包含已删除的驱动器的根目录。 未使用 dwItem2,应为 NULL

SHCNE_EXTENDED_EVENT

当前未使用。

SHCNE_FREESPACE

驱动器上的可用空间量已更改。 必须在uFlags 中指定SHCNF_IDLIST或SHCNF_PATHdwItem1 包含可用空间已更改的驱动器的根目录。 未使用 dwItem2,应为 NULL

SHCNE_MEDIAINSERTED

存储介质已插入驱动器。 必须在uFlags 中指定SHCNF_IDLIST或SHCNF_PATHdwItem1 包含包含新媒体的驱动器的根目录。 未使用 dwItem2,应为 NULL

SHCNE_MEDIAREMOVED

已从驱动器中删除存储介质。 必须在uFlags 中指定SHCNF_IDLIST或SHCNF_PATHdwItem1 包含从中删除介质的驱动器的根目录。 未使用 dwItem2,应为 NULL

SHCNE_MKDIR

已创建文件夹。 必须在uFlags 中指定SHCNF_IDLIST或SHCNF_PATHdwItem1 包含已创建的文件夹。 未使用 dwItem2,应为 NULL

SHCNE_NETSHARE

正在通过网络共享本地计算机上的文件夹。 必须在uFlags 中指定SHCNF_IDLIST或SHCNF_PATHdwItem1 包含正在共享的文件夹。 未使用 dwItem2,应为 NULL

SHCNE_NETUNSHARE

本地计算机上的文件夹不再通过网络共享。 必须在uFlags 中指定SHCNF_IDLIST或SHCNF_PATHdwItem1 包含不再共享的文件夹。 未使用 dwItem2,应为 NULL

SHCNE_RENAMEFOLDER

文件夹的名称已更改。 必须在uFlags 中指定SHCNF_IDLIST或SHCNF_PATHdwItem1 包含以前的 PIDL 或文件夹名称。 dwItem2 包含文件夹的新 PIDL 或名称。

SHCNE_RENAMEITEM

非文件夹项的名称已更改。 必须在uFlags 中指定SHCNF_IDLIST或SHCNF_PATHdwItem1 包含项的上一个 PIDL 或名称。 dwItem2 包含项的新 PIDL 或名称。

SHCNE_RMDIR

已删除文件夹。 必须在uFlags 中指定SHCNF_IDLIST或SHCNF_PATHdwItem1 包含已删除的文件夹。 未使用 dwItem2,应为 NULL

SHCNE_SERVERDISCONNECT

计算机已与服务器断开连接。 必须在uFlags 中指定SHCNF_IDLIST或SHCNF_PATHdwItem1 包含从中断开计算机连接的服务器。 未使用 dwItem2,应为 NULL

SHCNE_UPDATEDIR

现有文件夹的内容已更改,但该文件夹仍然存在且尚未重命名。 必须在uFlags 中指定SHCNF_IDLIST或SHCNF_PATHdwItem1 包含已更改的文件夹。 未使用 dwItem2,应为 NULL。 如果已创建、删除或重命名文件夹,请分别使用 SHCNE_MKDIRSHCNE_RMDIRSHCNE_RENAMEFOLDER

SHCNE_UPDATEIMAGE

系统映像列表中的映像已更改。 必须在uFlags 中指定SHCNF_DWORD。

dwItem2 包含系统映像列表中已更改的索引。 未使用 dwItem1,应为 NULL

SHCNE_UPDATEITEM

文件夹或非文件夹 (现有项) 已更改,但该项仍然存在且尚未重命名。 必须在uFlags 中指定SHCNF_IDLIST或SHCNF_PATHdwItem1 包含已更改的项。 未使用 dwItem2,应为 NULL。 如果已创建、删除或重命名非文件夹项,请分别使用 SHCNE_CREATESHCNE_DELETESHCNE_RENAMEITEM

SHCNE_DISKEVENTS

指定所有磁盘事件标识符的组合。

SHCNE_GLOBALEVENTS

指定所有全局事件标识符的组合。

SHCNE_INTERRUPT

指定的事件由于系统中断而发生。 由于此值会修改其他事件值,因此不能单独使用。

uFlags

类型: UINT

标记,当与 SHCNF_TYPE 按位组合时,指示 dwItem1dwItem2 参数的含义。 uFlags 参数必须是以下值之一。

SHCNF_DWORD

dwItem1dwItem2 参数是 DWORD 值。

SHCNF_IDLIST

dwItem1dwItem2ITEMIDLIST 结构的地址,表示受更改影响的项 () 。 每个 ITEMIDLIST 都必须相对于桌面文件夹。

SHCNF_PATH

dwItem1dwItem2 是包含受更改影响的项的完整路径名称的最大 长度MAX_PATH 以 null 结尾的字符串的地址。

SHCNF_PRINTER

dwItem1dwItem2 是以 null 结尾的字符串的地址,这些字符串表示受更改影响的打印机 () 的友好名称。

SHCNF_FLUSH

在通知传递到所有受影响的组件之前,函数不应返回。 由于此标志修改了其他数据类型标志,因此不能单独使用它。

SHCNF_FLUSHNOWAIT

函数应开始向所有受影响的组件传递通知,但应在通知过程开始后立即返回。 由于此标志修改了其他数据类型标志,因此它不能由自己使用。 此标志包括 SHCNF_FLUSH

SHCNF_NOTIFYRECURSIVE

通知已注册所有子级的客户端。

[in, optional] dwItem1

类型: LPCVOID

可选。 第一个与事件相关的值。

[in, optional] dwItem2

类型: LPCVOID

可选。 第二个与事件相关的值。

返回值

备注

注册任何类型的新处理程序的应用程序必须使用SHCNE_ASSOCCHANGED标志调用 SHChangeNotify,以指示 Shell 使图标和缩略图缓存失效。 这还将加载已注册的新图标和缩略图处理程序。 但请注意,不会重新加载图标覆盖处理程序。

dwItem1dwItem2 指向的字符串可以是 ANSI 或 Unicode。

要求

要求
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 shlobj_core.h (包括 Shlobj.h)
Library Shell32.lib
DLL Shell32.dll (4.0 或更高版本)
API 集 在 Windows 8.1) 中引入的 ext-ms-win-shell-shell32-l1-2-0 (