Обычно для изменения вида папок в Проводнике
используется файл 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;
Теперь можно открыть Проводник и посмотреть на значок.
|