Как изменить иконку у директории?

Обычно для изменения вида папок в Проводнике используется файл desktop.ini.

Сперва необходимо создать файл desktop.ini и поместить его в ту директорию, иконку которой мы хотим изменить. В программе для этого можно воспользоваться классом TIniFile и передать в него путь директории.

Теперь нам необходимо записать в .ini-файл пары значений. В desktop.ini эти пары выглядят следующим образом:


[.ShellCLassInfo]   
IconFile=C:\folder.ico   
IconIndex=0   
InfoTip=Folder info tip  

Самое главное - это указать иконку и её индекс.

Значение IconFile - это путь к .dll, .ico, или .exe файлу. В Delphi это выглядит так:


var iniFile: TIniFile;   
...   
iniFile:=TIniFile.Create(edFolderPath.Text);   
with iniFile do   
  begin   
    //Следующие строки записывают в desktop.ini все необходимые параметры   
    WriteString('.ShellClassInfo', 'IconFile',  editIconPath.Text);   
    WriteString('.ShellClassInfo', 'IconIndex', editIconIndex.Text);   
    WriteString('.ShellClassInfo', 'InfoTip',editInfoTip.Text);   
    UpdateFile;   
  end;   
iniFile.Free;  

Примечание: здесь editFolderPath, editIconPath, editIconIndex и editInfoTip - элементы TEdit, в которые вводятся все необходимые данные - путь к директории, иконку которой следует изменить, путь к файлу с иконкой, индекс иконки и всплывающая подсказка для директории (подсказка не обязательна).

Теперь, когда файл desktop.ini создан, необходимо изменить атрибуты папки и добавить системный флаг. Чтобы иконка отображалась правильно, желательно установить системный флажок как для папки, так и для её родителя. Для установки атрибутов воспользуемся функцией SetFileAttribue():


//Устанавливаем системные атрибуты для папки и её родителя   
SetFileAttributes(PChar(edFolderPath.Text), FILE_ATTRIBUTE_SYSTEM);   
if Length(edFolderPath.Text) > 3 then //Если директория не корневая...   
begin   
  //функция LastChar возвращает индекс последнего вхождения символа   
  //в строку. Этот способ позволяет быстро получить путь родительской   
  //директориии, если, конечно, директория не является корневой на диске...   
  tempDir := Copy( edFolderPath.Text, 1,LastChar(edFolderPath.Text, '')-1);   
  SetFileAttributes(PChar(tempDir), FILE_ATTRIBUTE_SYSTEM);                 
end;  

Теперь можно открыть Проводник и посмотреть на значок.
Теги:
иконка
Добавлено: 02 Августа 2018 07:32:40 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...