我正在使用c#功能更改文件夹图标。它工作正常,但问题是它第一次工作。我的意思是我无法更改已更改图标的文件夹的图标。 以下是代码:
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;
}
可能是什么原因?
答案 0 :(得分:4)
我遇到过类似的问题。 只需在第二次调用该函数之前删除desktop.ini文件。 如果要清除文件夹图标,则使用相同的方案:
...
FolderSettings.pszIconFile = @"{icon path}";
FolderSettings.iIconIndex = 0;
...
答案 1 :(得分:1)
只是为了完成,有问题的代码看起来没问题,但是第三个参数 SHGetSetFolderCustomSettings调用必须是FCS_FORCEWRITE才能更改设置(如果已存在)。 (如果值尚未存在,FCS_WRITE将仅设置它)
查看有关该参数的文档: http://msdn.microsoft.com/en-us/library/windows/desktop/bb762199(v=vs.85).aspx
答案 2 :(得分:1)
只需更改
UInt32 FCS_WRITE = FCS_READ | FCS_FORCEWRITE;
到
UInt32 FCS_WRITE = FCS_FORCEWRITE;
下次运行FCS_WRITE = FCS_READ时,它不会写agian。