具有桌面.ini和即时刷新功能的自定义文件夹图标

Custom folder icons with desktop.ini & instant refreshing

本文关键字:新功能 自定义 文件夹 图标 刷新 桌面 ini      更新时间:2023-10-16

我的任务是创建一个记录程序,跟踪文件和文件夹被读取的一些统计数据。类似于Google Drive和TortoiseSVN,文件夹和文件图标应该反映某些变化。例如,在某台计算机上,装有未被查看文件的USB具有'x',而已查看的文件具有'o'。

我可以用这个Windows API跟踪文件使用情况,图标(以及其他一些不错的选项)可以通过desktop.ini文件[1,2,3,4]来更改。

在手动修改desktop.ini文件时,我已经成功地更改了图标、描述和其他有趣的东西。问题是,直到Windows再次解析desktop.ini文件,新的更改才会更新。这种情况往往在几秒钟到几分钟之间不稳定地发生。F5刷新不会强制重新解析,但会在重新解析发生时更新映像。

如何强制Windows手动和(更重要的是)在c++程序中重新解析desktop.ini文件?

是否有一个可替代的c++ Windows API,可以立即更改文件夹图标?

如果你编辑desktop.ini,它的资源管理器不会自动刷新。使用SHGetSetFolderCustomSettings写入:

SHFOLDERCUSTOMSETTINGS fcs = {0};
fcs.dwSize = sizeof(SHFOLDERCUSTOMSETTINGS);
fcs.dwMask = FCSM_ICONFILE;
fcs.pszIconFile = iconPath;
fcs.cchIconFile = 0;
fcs.iIconIndex = iconIndex;
SHGetSetFolderCustomSettings(&fcs, folderPath, FCS_FORCEWRITE);

如果您希望使用不同的文件夹图标来明确地指示不同的状态(类似于SVN),那么您需要图标覆盖。更改文件夹图标不是合适的解决方案。文件夹图标的更改将立即反映出来如果您需要更多的细节,请告诉我。

string folder = "folder";
// Edit your folder\desktop.ini
string flush = "attrib +s "+folder;
system(flush.c_str());

你可以使用这段c++代码来刷新文件夹

中的desktop.ini