如何使用SHChangeNotify通知文件夹

时间:2012-03-12 15:34:41

标签: c++

我的应用程序将创建一些文件夹,并且需要根据某些活动更改其图标。

我尝试使用下面的功能,似乎没有刷新文件夹

SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNE_ALLEVENTS | SHCNE_UPDATEIMAGE | SHCNE_UPDATEDIR |SHCNF_PATH | SHCNF_FLUSHNOWAIT, L"C:\\Music\\Test", 0);

如果我使用 SHChangeNotify(SHCNE_ASSOCCHANGED, 0x1000, 0,0);,  整个桌面都得到了刷新。

请告诉我刷新文件夹的最佳方法。

2 个答案:

答案 0 :(得分:1)

你可能使用了错误的功能。特别是,SHCNE_ASSOCCHANGED的文档声明必须在SHCNF_IDLIST参数中指定“uFlags。dwItem1和dwItem2不使用且必须为NULL。”您没有传递SHCNF_IDLISTdwItem1是路径字符串,而不是NULL。此外,第二个参数应该只是SHCNF_*个标志的组合;你正在添加无效的SHCNE_*标志。

如果您要将文件写入L"C:\\Music\\Test",并希望资源管理器注意到这一点,请使用SHCNE_CREATE;如果添加文件夹,请使用SHCNE_MKDIR。在这两种情况下,dwItem1必须是创建项目的路径,而不是创建项目的父文件夹。

答案 1 :(得分:0)

试试这个 SHChangeNotify(SHCNE_UPDATEDIR,SHCNF_PATH | SHCNF_FLUSHNOWAIT," Path",NULL); 在哪里"路径"是您要更新的文件夹。