SHChangeNotify 函数 (shlobj_core.h)
通知系统应用程序已执行的事件。 如果应用程序执行可能影响 Shell 的操作,则应使用此函数。
语法
void SHChangeNotify(
LONG wEventId,
UINT uFlags,
[in, optional] LPCVOID dwItem1,
[in, optional] LPCVOID dwItem2
);
参数
wEventId
类型: LONG
描述已发生的事件。 通常,一次只指定一个事件。 如果指定了多个事件,则 dwItem1 和 dwItem2 参数中包含的值对于所有指定事件必须分别相同。 此参数可能是以下一个或多个值:
SHCNE_ALLEVENTS
所有事件都已发生。
SHCNE_ASSOCCHANGED
文件类型关联已更改。 必须在uFlags 参数中指定SHCNF_IDLIST。 不使用 dwItem1 和 dwItem2,必须为 NULL。 还应为已注册的协议发送此事件。
SHCNE_ATTRIBUTES
项目或文件夹的属性已更改。 必须在uFlags 中指定SHCNF_IDLIST或SHCNF_PATH。 dwItem1 包含已更改的项目或文件夹。 未使用 dwItem2,应为 NULL。
SHCNE_CREATE
已创建非文件夹项。 必须在uFlags 中指定SHCNF_IDLIST或SHCNF_PATH。 dwItem1 包含已创建的项。 未使用 dwItem2,应为 NULL。
SHCNE_DELETE
已删除非文件夹项。 必须在uFlags 中指定SHCNF_IDLIST或SHCNF_PATH。 dwItem1 包含已删除的项。 未使用 dwItem2,应为 NULL。
SHCNE_DRIVEADD
已添加驱动器。 必须在uFlags 中指定SHCNF_IDLIST或SHCNF_PATH。 dwItem1 包含已添加的驱动器的根。 未使用 dwItem2,应为 NULL。
SHCNE_DRIVEADDGUI
Windows XP 及更高版本:未使用。
SHCNE_DRIVEREMOVED
已删除驱动器。 必须在uFlags 中指定SHCNF_IDLIST或SHCNF_PATH。 dwItem1 包含已删除的驱动器的根目录。 未使用 dwItem2,应为 NULL。
SHCNE_EXTENDED_EVENT
当前未使用。
SHCNE_FREESPACE
驱动器上的可用空间量已更改。 必须在uFlags 中指定SHCNF_IDLIST或SHCNF_PATH。 dwItem1 包含可用空间已更改的驱动器的根目录。 未使用 dwItem2,应为 NULL。
SHCNE_MEDIAINSERTED
存储介质已插入驱动器。 必须在uFlags 中指定SHCNF_IDLIST或SHCNF_PATH。 dwItem1 包含包含新媒体的驱动器的根目录。 未使用 dwItem2,应为 NULL。
SHCNE_MEDIAREMOVED
已从驱动器中删除存储介质。 必须在uFlags 中指定SHCNF_IDLIST或SHCNF_PATH。 dwItem1 包含从中删除介质的驱动器的根目录。 未使用 dwItem2,应为 NULL。
SHCNE_MKDIR
已创建文件夹。 必须在uFlags 中指定SHCNF_IDLIST或SHCNF_PATH。 dwItem1 包含已创建的文件夹。 未使用 dwItem2,应为 NULL。
SHCNE_NETSHARE
正在通过网络共享本地计算机上的文件夹。 必须在uFlags 中指定SHCNF_IDLIST或SHCNF_PATH。 dwItem1 包含正在共享的文件夹。 未使用 dwItem2,应为 NULL。
SHCNE_NETUNSHARE
本地计算机上的文件夹不再通过网络共享。 必须在uFlags 中指定SHCNF_IDLIST或SHCNF_PATH。 dwItem1 包含不再共享的文件夹。 未使用 dwItem2,应为 NULL。
SHCNE_RENAMEFOLDER
文件夹的名称已更改。 必须在uFlags 中指定SHCNF_IDLIST或SHCNF_PATH。 dwItem1 包含以前的 PIDL 或文件夹名称。 dwItem2 包含文件夹的新 PIDL 或名称。
SHCNE_RENAMEITEM
非文件夹项的名称已更改。 必须在uFlags 中指定SHCNF_IDLIST或SHCNF_PATH。 dwItem1 包含项的上一个 PIDL 或名称。 dwItem2 包含项的新 PIDL 或名称。
SHCNE_RMDIR
已删除文件夹。 必须在uFlags 中指定SHCNF_IDLIST或SHCNF_PATH。 dwItem1 包含已删除的文件夹。 未使用 dwItem2,应为 NULL。
SHCNE_SERVERDISCONNECT
计算机已与服务器断开连接。 必须在uFlags 中指定SHCNF_IDLIST或SHCNF_PATH。 dwItem1 包含从中断开计算机连接的服务器。 未使用 dwItem2,应为 NULL。
SHCNE_UPDATEDIR
现有文件夹的内容已更改,但该文件夹仍然存在且尚未重命名。 必须在uFlags 中指定SHCNF_IDLIST或SHCNF_PATH。 dwItem1 包含已更改的文件夹。 未使用 dwItem2,应为 NULL。 如果已创建、删除或重命名文件夹,请分别使用 SHCNE_MKDIR、 SHCNE_RMDIR或 SHCNE_RENAMEFOLDER。
SHCNE_UPDATEIMAGE
系统映像列表中的映像已更改。 必须在uFlags 中指定SHCNF_DWORD。
dwItem2 包含系统映像列表中已更改的索引。 未使用 dwItem1,应为 NULL。
SHCNE_UPDATEITEM
文件夹或非文件夹 (现有项) 已更改,但该项仍然存在且尚未重命名。 必须在uFlags 中指定SHCNF_IDLIST或SHCNF_PATH。 dwItem1 包含已更改的项。 未使用 dwItem2,应为 NULL。 如果已创建、删除或重命名非文件夹项,请分别使用 SHCNE_CREATE、 SHCNE_DELETE或 SHCNE_RENAMEITEM。
SHCNE_DISKEVENTS
指定所有磁盘事件标识符的组合。
SHCNE_GLOBALEVENTS
指定所有全局事件标识符的组合。
SHCNE_INTERRUPT
指定的事件由于系统中断而发生。 由于此值会修改其他事件值,因此不能单独使用。
uFlags
类型: UINT
标记,当与 SHCNF_TYPE 按位组合时,指示 dwItem1 和 dwItem2 参数的含义。 uFlags 参数必须是以下值之一。
SHCNF_DWORD
dwItem1 和 dwItem2 参数是 DWORD 值。
SHCNF_IDLIST
dwItem1 和 dwItem2 是 ITEMIDLIST 结构的地址,表示受更改影响的项 () 。 每个 ITEMIDLIST 都必须相对于桌面文件夹。
SHCNF_PATH
dwItem1 和 dwItem2 是包含受更改影响的项的完整路径名称的最大 长度MAX_PATH 以 null 结尾的字符串的地址。
SHCNF_PRINTER
dwItem1 和 dwItem2 是以 null 结尾的字符串的地址,这些字符串表示受更改影响的打印机 () 的友好名称。
SHCNF_FLUSH
在通知传递到所有受影响的组件之前,函数不应返回。 由于此标志修改了其他数据类型标志,因此不能单独使用它。
SHCNF_FLUSHNOWAIT
函数应开始向所有受影响的组件传递通知,但应在通知过程开始后立即返回。 由于此标志修改了其他数据类型标志,因此它不能由自己使用。 此标志包括 SHCNF_FLUSH。
SHCNF_NOTIFYRECURSIVE
通知已注册所有子级的客户端。
[in, optional] dwItem1
类型: LPCVOID
可选。 第一个与事件相关的值。
[in, optional] dwItem2
类型: LPCVOID
可选。 第二个与事件相关的值。
返回值
无
备注
注册任何类型的新处理程序的应用程序必须使用SHCNE_ASSOCCHANGED标志调用 SHChangeNotify,以指示 Shell 使图标和缩略图缓存失效。 这还将加载已注册的新图标和缩略图处理程序。 但请注意,不会重新加载图标覆盖处理程序。
dwItem1 和 dwItem2 指向的字符串可以是 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 ( |