Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 997

/ вопрос открыт /

Здравствуйте, эксперты!

Искал тут на сайте, но не нашел. Поэтому решил спросить.
Подскажите как программно поменять иконку у нужной мне папки
в Windows, чтобы в Explorere отображалась моя иконка

Заранее спасибо.

Muratov Radik Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Muratov Radik (статус: Посетитель)
Вопрос отправлен: 3 февраля 2011, 10:56
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: min@y™

Надо создать в ентой папке файл desktop.ini (можно скрытый) вот с такими строчками:

[.ShellClassInfo]
IconFile=<путь к файлу с иконкой, можно относительный (ico, exe, dll и т.п.)>
IconIndex=<номер иконки в файле (отсчёт с нуля)>
Затем надо установить самой папке атрибут "Системный".

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 3 февраля 2011, 11:25
Оценка за ответ: 5

Ответ #2. Отвечает эксперт: Вадим К

Здравствуйте, Muratov Radik!
План действий такой.
В нужной папке создаем файл с названием desktop.ini (можно просто как текстовый создать или на худой конец просто использовать memo) на три строки вида
[.ShellClassInfo]
IconFile=ИмяИконки.ico
IconIndex=0

Можно вместо ИмяИконки.ico прописать любой exe или dll, где есть иконка и указать правильный индекс иконки.
А дальше нужно сделать небольшую магию. На файл desktop.ini нужно наложить атрибуты системый и скрытый, а на саму папку - только для чтения (вот этот пункт иногда не нужен, иногда нужен).
выставить аттрибуты можно процедурой SetFileAttributes(имяфайла , FILE_ATTRIBUTE_*);

var
  s:string;
begin
  s := 'C:\mydir';
  SetFileAttributes(s , FILE_ATTRIBUTE_READONLY);
  SetFileAttributes(s + '\desktop.ini' , FILE_ATTRIBUTE_HIDDEN or FILE_ATTRIBUTE_SYSTEM);

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 3 февраля 2011, 11:30
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 8; последнее сообщение — 3 февраля 2011, 13:41; участников в обсуждении: 5.
bugmenot

bugmenot (статус: 3-ий класс), 3 февраля 2011, 11:38 [#1]:

> самой папке атрибут "Системный"
одно лечит, другое калечит
с этим пунктом довольно туманно, работает и так, но в доках присутствует
виконання програми розпочинається з того самого мiсця, де призупинилося.

min@y™

min@y™ (статус: Доктор наук), 3 февраля 2011, 11:41 [#2]:

2Вадим К: Папке надо присвоить атрибут "системный". Файлу desktop.ini никаких атрибутов присваивать не обязательно - щас сам проверял.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
min@y™

min@y™ (статус: Доктор наук), 3 февраля 2011, 11:57 [#3]:

Вот кусок статьи, взятый отсюда.

Цитата:


Пример, как может выглядить содержимое desktop.ini:

[{BE098140-A513-11D0-A3A4-00C04FD706EC}]
iconarea_image=Catalog.jpg
IconArea_Text=0x00999999
IconArea_TextBackground=0x00FFFFFF
[.ShellClassInfo]
IconFile="Catalog.ico"
IconIndex=0
InfoTip=Моя любимая папка!

Расшифровка параметров:
iconarea_image=картинка фона папки (если вместо пути только имя, то файл берётся из самого данного каталога)
IconArea_Text=цвет шрифта названия в html формате (шестнадцатиричном)
IconArea_TextBackground=цвет фона названия в html формате (шестнадцатиричном)
IconFile=файл с иконкой (значком) (или простой, с одной иконкой (.ico); или библиотека исконок в ресурсном файле (.exe,.dll,.icl, другие))
IconIndex=порядковый номер иконки в файле (нужно, если в IconFile=указана библиотека иконок, если простой файл (.ico), то всегда =0)
InfoTip=комментарий отображаемый во всплывающей подсказке
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
bugmenot

bugmenot (статус: 3-ий класс), 3 февраля 2011, 12:07 [#4]:

"выглядить", sic!
http://msdn.microsoft.com/en-us/library/cc144102(VS.85).aspx же
виконання програми розпочинається з того самого мiсця, де призупинилося.

Вадим К

Вадим К (статус: Академик), 3 февраля 2011, 12:15 [#5]:

min@y™: Как показывает практика, на девяти машинах работает нормально, а на десятой не хочет. А выставишь флажок - работает. Может быть это зависит от каких то сервис паков или сторонних программ.
Галочка "подтверждения прочтения" - вселенское зло.
DNK

DNK (статус: Студент), 3 февраля 2011, 12:15 [#6]:

Возможно это из пушки по воробьям, но есть ещё вариант с оверлейными значками.
"Digital Networked Knight"
bugmenot

bugmenot (статус: 3-ий класс), 3 февраля 2011, 12:28 [#7]:

> вариант с оверлейными значками
я думаю, это немного не то. а вот в соседнем топике описывается возможность массово объиконивать папки с помощью ShellIconHandler
http://msdn.microsoft.com/en-us/library/cc144122(VS.85).aspx
виконання програми розпочинається з того самого мiсця, де призупинилося.

Muratov Radik

Muratov Radik (статус: Посетитель), 3 февраля 2011, 13:41 [#8]:

Проверял по отдельности и с Системный, и с Только для чтения. Работает с обоими вариантами. Потом поставил оба сразу, тоже работает. Думаю ставить оба, на всякий случай

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:33
Выполнено за 0.03 сек.