Изменение значка папки

Я меняю значки папок с помощью функции 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;
}

Что может быть причиной?

 Deepak Kumar15 февр. 2012 г., 05:28
Собственно проблема. Это изменение файла desktop.ini. Это то, что я получаю, когда открываю desktop.ini [.ShellClassInfo] IconResource = C: \ Users \ deepak.chopra \ Pictures \ CD-Folder.ico, 0 "." CD-Folder.ico "- это значок Я применил к папке «D: \ Downloaded Data».
 Hans Passant14 февр. 2012 г., 15:05
Проверьте, обновляется ли скрытый файл desktop.ini. Кроме того, значки кэширования Explorer никогда не являются проблемой.
 Deepak Kumar15 февр. 2012 г., 05:24
@ Ханс - Как я могу это сделать?
 Deepak Kumar14 февр. 2012 г., 14:19
Я сделал изменения в вопросе.
 Martin Hennings14 февр. 2012 г., 14:16
Пожалуйста, покажите код, изменяющий значок в первый раз и подряд

Ответы на вопрос(3)

ред повторным вызовом функции. Тот же сценарий используется, если вы хотите очистить значок папки:

Удалить desktop.ini.Опустите следующие строки:

....

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

....

но 3-ий параметр в вызове SHGetSetFolderCustomSettings должен быть 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.

Ваш ответ на вопрос