SHChangeNotify( SHCNE_DELETE, SHCNF_PATH | SHCNF_FLUSHNOWAIT,
TEXT("C:\\WINDOWS"), NULL );
运行这条命令时,请打开 C 盘,并确认 WINDOWS 文件夹存在,运行后,保证目瞪口呆,WINDOWS 文件夹竟然不见了,哈哈,别怕,刷新一下又回来了。这只是欺骗而已。这个东西有吓人作用.
原型:
SHChangeNotify
相应的设置。
WINSHELLAPI void WINAPI SHChangeNotify(
LONG wEventID, //指定事件类型
UINT uFlags, //确定dwItem1和dwItem2作的标志
LPCVOID dwItem1,
LPCVOID dwItem2
);
1.wEventId的取值如下:
SHCNE_ASSOCCHANGED:修改文件关联
SHCNE_ATTRIBUTES:改变文件属性
SHCNE_CREATE:创建新文件
SHCNE_DELETE:删除文件
SHCNE_DRIVEADD:增加网络驱动器
SHCNE_DRIVEADDGUI:通过GUI增加网络驱动器
SHCNE_DRIVEREMOVED:卸载网络驱动器
SHCNE_INTERRUPT:将事件作为系统中断执行。
SHCNE_MEDIAINSERTED:安装可卸载媒体,如CD-ROM
SHCNE_MEDIAREMOVED:卸载可卸载媒体,如CD-ROM
SHCNE_MKDIR:新建目录
SHCNE_NETSHARE:网络上共享资源
SHCNE_NETUNSHARE:网络上停止共享资源
SHCNE_RENAMEFOLDER:文件夹改名
SHCNE_RENAMEITEM:文件夹中某项改名
SHCNE_RMDIR:删除目录
SHCNE_SERVERDISCONNECT:与网络服务器断开链接
SHCNE_UPDATEDIR:更新目录信息
SHCNE_UPDATEIMAGE:改变系统全局图像列表中的一个图像
SHCNE_UPDATEITEM:改变打印机或文件的列表
3.该函数没有返回值。
2.uFlags的取值如下:
SHCNF_DWORD: dwItem1和dwItem2是DWORD类型值。
SHCNF_FLUSH:清空系统事件缓冲区,系统处理完给定的事件后才返回
SHCNF_FLUSHNOWAIT:清空系统事件缓冲区,立即返回
SHCNF_IDLIST:dwItem1和dwItem2为项目标识符列表的地址
SHCNF_PATH:dwItem1和dwItem2为路径地址
SHCNF_PRINTER:dwItem1和dwItem2为友好打印机名
wEventId
描述已发生的事件。通常情况下,一次只能指定一个事件。如果超过指定一个事件,则包含在dwItem1和dwItem2参数的值分别在所有指定的事件中都必须相同。这个参数可以是一个或多个下列值:
SHCNE_ALLEVENTS
所有事件都已经发生。
SHCNE_ASSOCCHANGED
一个文件类型关联发生了变化。SHCNF_IDLIST必须指定在uFlags参数。dwItem1和dwItem2没有使用,必须为NULL。
SHCNE_ATTRIBUTES
一个项目或文件夹的属性发生了变化。SHCNF_IDLIST或SHCNF_PATH必须指定在uFlags。 dwItem1包含的项目或文件夹已经改变。dwItem2未使用,应为NULL。
SHCNE_CREATE
一个非文件夹项目已创建。SHCNF_IDLIST或SHCNF_PATH必须指定在uFlags。dwItem1包含所创建的项目。dwItem2未使用,应为NULL。
SHCNE_DELETE
一个非文件夹项目已经被删除。SHCNF_IDLIST或SHCNF_PATH必须指定在uFlags。dwItem1包含已删除的项目。dwItem2未使用,应为NULL。
SHCNE_DRIVEADD
一个驱动器已被添加。SHCNF_IDLIST或SHCNF_PATH必须指定在uFlags。dwItem1包含已添加驱动器的根。dwItem2未使用,应为NULL。
SHCNE_DRIVEADDGUI
增加了一个驱动器,外壳应为驱动器创建一个新的窗口。SHCNF_IDLIST或SHCNF_PATH必须指定在uFlags。dwItem1包含已添加驱动器的根。dwItem2未使用,应为NULL。
Windows XP and later: Not used.
SHCNE_DRIVEREMOVED
一个驱动器已被删除。SHCNF_IDLIST或SHCNF_PATH必须指定在uFlags。dwItem1包含被删除的驱动器的根。dwItem2未使用,应为NULL。
SHCNE_EXTENDED_EVENT
目前未使用。
SHCNE_FREESPACE
一个驱动器上的可用空间量发生了变化。SHCNF_IDLIST或SHCNF_PATH必须指定在uFlags。dwItem1包含可用空间变化的驱动器的根。dwItem2未使用,应为NULL。
SHCNE_MEDIAINSERTED
存储介质已被插入到驱动器。SHCNF_IDLIST或SHCNF_PATH必须指定在uFlags。dwItem1包含该驱动器的根。dwItem2未使用,应为NULL。
SHCNE_MEDIAREMOVED
存储介质已从一个驱动器删除。SHCNF_IDLIST或SHCNF_PATH必须指定在uFlags。dwItem1包含该驱动器的根。dwItem2未使用,应为NULL。
SHCNE_MKDIR.
一个文件夹已被创建。SHCNF_IDLIST或SHCNF_PATH必须指定在uFlags。dwItem1包含所创建的文件夹。dwItem2未使用,应为NULL。
SHCNE_NETSHARE
一个本地计算机上的文件夹通过网络被共享。SHCNF_IDLIST或SHCNF_PATH必须指定在uFlags。dwItem1包含了被共享的文件夹。dwItem2未使用,应为NULL。
SHCNE_NETUNSHARE
一个本地计算机上的文件夹不再通过网络被共享。SHCNF_IDLIST或SHCNF_PATH必须指定在uFlags。dwItem1包含了不再被共享的文件夹。dwItem2未使用,应为NULL。
SHCNE_RENAMEFOLDER
文件夹的名称已更改。SHCNF_IDLIST或SHCNF_PATH必须指定在uFlags。dwItem1包含文件夹之前的PIDL或名称。dwItem2包含文件夹新的PIDL或名称。
SHCNE_RENAMEITEM
一个非文件夹项目的名称已更改。SHCNF_IDLIST或SHCNF_PATH必须指定在uFlags。dwItem1包含项目之前的PIDL或名称。dwItem2包含项目新的PIDL或名称。
SHCNE_RMDIR
一个文件夹已被删除。SHCNF_IDLIST或SHCNF_PATH必须指定在uFlags。dwItem1包含被删除的文件夹。dwItem2未使用,应为NULL。
SHCNE_SERVERDISCONNECT
计算机已经从服务器断开。SHCNF_IDLIST或SHCNF_PATH必须指定在uFlags。dwItem1包含从该计算机已断开的服务器。dwItem2未使用,应为NULL。
SHCNE_UPDATEDIR
现有文件夹的内容发生了变化,但文件夹仍然存在,并没有被重新命名。SHCNF_IDLIST或SHCNF_PATH必须指定在uFlags。dwItem1包含已更改的文件夹。dwItem2未使用,应为NULL。如果是文件夹已被创建,删除或重命名,则应分别使用SHCNE_MKDIR,SHCNE_RMDIR,或SHCNE_RENAMEFOLDER。
SHCNE_UPDATEIMAGE
系统图像列表里的一个图像发生了变化。SHCNF_DWORD必须指定在uFlags。dwItem2包含已更改的系统图像列表的图像索引。dwItem1未使用,应为NULL。
SHCNE_UPDATEITEM
现有的项目(文件夹或非文件夹)发生了变化,但该项目依然存在,并没有被重新命名。SHCNF_IDLIST或SHCNF_PATH必须指定uFlags。dwItem1包含已更改的项目。 dwItem2未使用,应为NULL。如果是非文件夹项目已被创建,删除或重命名,则应分别使用SHCNE_CREATE,SHCNE_DELETE,或SHCNE_RENAMEITEM代替。
SHCNE_DISKEVENTS
指定一个所有磁盘事件标识符的组合。
SHCNE_GLOBALEVENTS
指定一个所有全局事件标识符的组合。
SHCNE_INTERRUPT
指定的事件发生导致系统中断。由于该值修改其他事件值,它不能被单独使用。
uFlags
指示dwItem1和dwItem2参数含义的标志。uFlags参数必须是以下值之一:
SHCNF_DWORD
dwItem1和dwItem2参数是DWORD值.
SHCNF_IDLIST
dwItem1和dwItem2是代表这个项目被变更影响的ITEMIDLIST结构的地址。每个ITEMIDLIST必须是相对于桌面的文件夹。
SHCNF_PATH
dwItem1和dwItem2是最大长度为MAX_PATH的以'\0'结束的字符串的地址,包含了该被变更影响的项目的完整路径名称。
SHCNF_PRINTER
dwItem1和dwItem2是以'\0'结束的字符串的地址,代表被变更影响的打印机的友好名称。
SHCNF_FLUSH
函数不应该返回,直到已通知所有受影响的组件。由于这标志修改其他数据类型标志,它不能由自己使用。
SHCNF_FLUSHNOWAIT
函数应该开始通知所有受影响的组件,但当进程已经开始通知时就应返回。由于这标志修改其他数据类型标志,它不能由自己使用。此标志包含SHCNF_FLUSH。
SHCNF_NOTIFYRECURSIVE
Notify clients registered for all children.
dwItem1
可选。第一个事件相关的值。
dwItem2
可选。第二个事件相关的值。
编辑本段 返回值
这个函数没有返回值。
应用程序注册的任何类型的新的处理程序必须调用SHChangeNotify并指定SHCNE_ASSOCCHANGED标志来指示外壳去刷新缓存和搜索新的处理程序。
Requirements
Version 4.00 and later of Shell32.dll
Windows NT/2000: Requires Windows NT 4.0 or later.
Windows 95/98: Requires Windows 95 or later.
Header: Declared in shlobj.h.
Import Library: shell32.lib.