文件夹图标更改
我正在用c#function更改文件夹图标。 它工作正常,但问题是它第一次工作。 我的意思是我无法更改已更改图标的文件夹的图标。 以下是代码:
static void Main(string[] args) { LPSHFOLDERCUSTOMSETTINGS FolderSettings = new LPSHFOLDERCUSTOMSETTINGS(); FolderSettings.dwMask = 0x10; FolderSettings.pszIconFile = @"C:Program Files (x86)Common FilesTortoiseOverlaysiconsXPStyleModifiedIcon.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文件。 如果要清除文件夹图标,则使用相同的方案:
- 删除desktop.ini。
- 省略以下几行:
….
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。
上述就是C#学习教程:文件夹图标更改分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1013625.html