Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.28;
Скачать: CL | DM;

Вниз

Получить иконку папки для ShGetFileInfo   Найти похожие ветки 

 
Андрей Молчанов   (2005-08-08 22:10) [0]

Здравствуйте!

Нужно получить индекс иконки обыкновенной папки от функции SHGetFileInfo. В действительности папка может не существовать. По идее можно взять от C:\Windows, но такой папки может и не быть или пользователь может установить на нее свою иконку. Спасибо.


 
Mx ©   (2005-08-08 22:16) [1]

Если я правильно понял, то можно залезть в Shell32.dll и посмотреть индекс. Думаю он стандартный для всех Windows.


 
Гаврила ©   (2005-08-08 22:19) [2]


> но такой папки может и не быть


Папку Windows можно узнать


> или пользователь может установить на нее свою иконку

Каким образом?


 
Mx ©   (2005-08-08 22:21) [3]


> Гаврила ©   (08.08.05 22:19) [2]
> > или пользователь может установить на нее свою иконку
> Каким образом?

Всплывающее меню/Свойства/Настройка


 
Андрей Молчанов   (2005-08-08 22:26) [4]


> Если я правильно понял, то можно залезть в Shell32.dll и
> посмотреть индекс. Думаю он стандартный для всех Windows.

Действительно - 4 и 5. Но, при использовании подставляются не те иконки :(


> Каким образом?

C помощью StyleXP


 
Mx ©   (2005-08-08 22:35) [5]

Блин, фиг знает, особенно с учетом замечания C помощью StyleXP


 
Mx ©   (2005-08-08 22:36) [6]


> Андрей Молчанов   (08.08.05 22:26) [4]

А зачем тебе это надо? Может по-другому сформулировать задачу, тогда и другое решение будет?


 
Наиль ©   (2005-08-08 22:44) [7]

Цитата из каких-то "советов"
Стандартные значки Windows 9x. В разделе реестра [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Current Version\explorer\Shell Icons] содержится множество строковых параметров с именем в виде числа. Каждый из них отвечает за значок какого-либо объекта:
...
3 Папка
4 Открытая папка
...
Установите значением параметра путь к значку (если значок хранится в библиотеке, то после пути к ней, через запятую, нужно указать номер значка, начиная с нуля), и он изменится.


 
Наиль ©   (2005-08-08 22:52) [8]

Думаю, ясно, что нужно читать соотвествующую ветку реестра, чтобы узнать иконку общую для всех папок.
Но это пустяки, у каждой папки может быть свой значок, см. [3]
Он храниться в Desktop.ini, в соответсвующей папке в виде

[.ShellClassInfo]
IconFile=%SystemRoot%\system32\SHELL32.dll
IconIndex=19

Делай выводы.


 
Mx ©   (2005-08-09 00:08) [9]


> Наиль ©   (08.08.05 22:52) [8]

Я бы не был так уверен про реестр. Например, у меня приведенного ключа нет вообще.


 
Наиль ©   (2005-08-09 00:22) [10]

Придётся мне отвечать за свои слова.
Значок папки (у меня XP) храниться в реестре по адресу
HKEY_LOCAL_MACHINE\Classes\Folder\DefaultIcon

Кстати, я заметил, что DefaultIcon имеется очень у многих объектов (интерфейсов) в реестре.


 
Андрей Молчанов   (2005-08-09 10:10) [11]

Похоже, я задал вопрос некорректно - у меня есть ImageList
CheckTree.Images.Handle := SHGetFileInfo("C:\", 0, fi, SizeOf(fi), SHGFI_SMALLICON or SHGFI_SYSICONINDEX);
Как мне присвоить элементу дерева, связанному со списком, иконку стандартной папки? Причем, в реальности папки может не быть.


 
Rouse_ ©   (2005-08-09 10:22) [12]

> Как мне присвоить элементу дерева, связанному со списком,
> иконку стандартной папки?

Возьми эту иконку из %SystemRoot%\system32\SHELL32.dll иконку с индексом 3


 
Андрей Молчанов   (2005-08-09 10:32) [13]

Нет, у меня imagelist системный стоит. Мне нужно индекс иконки папки.


 
Гаврила ©   (2005-08-09 10:56) [14]

Кстати, именно на папку Windows иконка, похоже, не может меняться поьльзователем


 
Mx ©   (2005-08-09 11:00) [15]


> Андрей Молчанов   (09.08.05 10:32) [13]
> Нет, у меня imagelist системный стоит

Что значит системный? И чем его "индекс" отличается от обычного?


 
Андрей Молчанов   (2005-08-09 11:45) [16]

Пожалуйста, приведите код, с помощью которого я могу присвоить индекс стандартной, возможно несуществующей, папки.


 
Андрей Молчанов   (2005-08-09 18:47) [17]

Методом тыка наконец то нашел - надо просто вызвать SHGetFileInfo("", 0, fi, SizeOf(fi), SHGFI_SMALLICON or SHGFI_SYSICONINDEX);
fi.iIcon будет иконкой папки


 
Mx ©   (2005-08-09 22:27) [18]


> Андрей Молчанов   (09.08.05 18:47) [17]

Ну вот видишь, "камушек" ShellAPI все больше поддается :)


 
Андрей Молчанов   (2005-08-10 08:48) [19]

:) Спасибо



Страницы: 1 вся ветка

Текущий архив: 2005.08.28;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.036 c
3-1121672917
vigo
2005-07-18 11:48
2005.08.28
Ввод данных в таблицу (Insert и Commit).


1-1123392246
Antonn
2005-08-07 09:24
2005.08.28
перемещение контрола за всю клиентскую область


14-1123160887
syte_ser78
2005-08-04 17:08
2005.08.28
Как зовется прога которая сканирует диск и меняет в именах файлов


1-1123230053
Mx
2005-08-05 12:20
2005.08.28
Так, а если общение через интерфейс, но интерфейс в DLL?


14-1123172076
Gerakl
2005-08-04 20:14
2005.08.28
Delphi2005