问题
I'm trying to change folder icon programmatically using changing desktop.ini on the folder. I can set a icon, but can't change it immediately through changing "IconIndex". The icon is also changed in several seconds later.
Is there anybody know how to change the icon immediately?
回答1:
I already answered by commenting a reply at my question before. For more convenience, I will write an answer again.
If you want to make any change at an appearance of any folder using Desktop.ini, use some of win32 shell functions. You shouldn't try to edit a Desktop.ini directly. It doesn't get to make any change at an appearance of any folder.
You could get more information of win32 shell functions through the following link.
http://msdn.microsoft.com/en-us/library/windows/desktop/bb776426(v=vs.85).aspx
回答2:
Example:
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);
回答3:
The following procedure works well for me (on Windows 7):
- Change desktop.ini file
- Issue SHChangeNotify(SHCNE_DELETE,SHCNF_PATH,"path_to/desktop.ini",0);
- Folder ico will be refreshed
Remember to include Shlobj.h
来源:https://stackoverflow.com/questions/6464147/how-can-i-immediately-reload-a-folder-icon-when-desktop-ini-is-changed