Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.08.28;
Скачать: [xml.tar.bz2];

Вниз

Получить иконку папки для 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.056 c
14-1123002353
alexteam
2005-08-02 21:05
2005.08.28
нестандартная ситуация.


1-1123516665
Zer0
2005-08-08 19:57
2005.08.28
запуск метода сразу после заверщения работы FormCreate


14-1123150297
pusrg
2005-08-04 14:11
2005.08.28
Изменение свойства Security для папки?


1-1123169990
MaxVal
2005-08-04 19:39
2005.08.28
Добавление AVI-файла в EXE-файл!


1-1123172908
Alex77777
2005-08-04 20:28
2005.08.28
Помогите решить задачу





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский