文件夹图标更改

我正在用c#function更改文件夹图标。 它工作正常,但问题是它第一次工作。 我的意思是我无法更改已更改图标的文件夹的图标。 以下是代码:

static void Main(string[] args) { LPSHFOLDERCUSTOMSETTINGS FolderSettings = new LPSHFOLDERCUSTOMSETTINGS(); FolderSettings.dwMask = 0x10; FolderSettings.pszIconFile = @"C:\Program Files (x86)\Common Files\TortoiseOverlays\icons\XPStyle\ModifiedIcon.ico"; FolderSettings.iIconIndex = 0; UInt32 FCS_READ = 0x00000001; UInt32 FCS_FORCEWRITE = 0x00000002; UInt32 FCS_WRITE = FCS_READ | FCS_FORCEWRITE; string pszPath = @"D:\Downloaded Data"; UInt32 HRESULT = SHGetSetFolderCustomSettings(ref FolderSettings, pszPath, FCS_WRITE); //Console.WriteLine(HRESULT.ToString("x")); //Console.ReadLine(); } [DllImport("Shell32.dll", CharSet = CharSet.Auto)] static extern UInt32 SHGetSetFolderCustomSettings(ref LPSHFOLDERCUSTOMSETTINGS pfcs, string pszPath, UInt32 dwReadWrite); [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] struct LPSHFOLDERCUSTOMSETTINGS { public UInt32 dwSize; public UInt32 dwMask; public IntPtr pvid; public string pszWebViewTemplate; public UInt32 cchWebViewTemplate; public string pszWebViewTemplateVersion; public string pszInfoTip; public UInt32 cchInfoTip; public IntPtr pclsid; public UInt32 dwFlags; public string pszIconFile; public UInt32 cchIconFile; public int iIconIndex; public string pszLogo; public UInt32 cchLogo; } 

可能是什么原因?

我遇到过类似的问题。 只需在第二次调用该函数之前删除desktop.ini文件。 如果要清除文件夹图标,则使用相同的方案:

  1. 删除desktop.ini。
  2. 省略以下几行:

….

 FolderSettings.pszIconFile = @"{icon path}"; FolderSettings.iIconIndex = 0; 

….

只是为了完成,有问题的代码看起来没问题,但SHGetSetFolderCustomSettings调用中的第3个参数必须是FCS_FORCEWRITE才能更改设置(如果已存在)。 (如果值尚未存在,FCS_WRITE将仅设置它)

请参阅有关该参数的文档: http : //msdn.microsoft.com/en-us/library/windows/desktop/bb762199(v = vs.85).aspx

只是改变

 UInt32 FCS_WRITE = FCS_READ | FCS_FORCEWRITE; 

 UInt32 FCS_WRITE = FCS_FORCEWRITE; 

当你下次运行FCS_WRITE = FCS_READ时,它就不会写agian。