不重启的情况下更新windows的系统参数设置(例如文件关联等)

SHChangeNotify( SHCNE_DELETE, SHCNF_PATH | SHCNF_FLUSHNOWAIT, 
      TEXT("C:\\WINDOWS"), NULL );
运行这条命令时,请打开 C 盘,并确认 WINDOWS 文件夹存在,运行后,保证目瞪口呆,WINDOWS 文件夹竟然不见了,哈哈,别怕,刷新一下又回来了。这只是欺骗而已。这个东西有吓人作用.

原型:

SHChangeNotify

对注册表进行操作后,必须调用SHChangeNotify函数(该API函数的单元文件是ShlObj),它能通知Windows系统更新
相应的设置。
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.

你可能感兴趣的:(C++)