Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Стандартные иконки, где лежат?  (Прочитано 10693 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Klient
Новенький

by
Offline Offline

« : 06-11-2012 01:36 » 

Функциями FindFirstFile, FindNextFile получаю список файлов.
Надо распечатать его в окне, с иконками, как в стандартном еxplorerе.
Где проводник берет иконки?
Например, для XP, подозреваю файл - C:\Documents and Settings\User\NTUSER.DAT.
Похоже там кеш иконок.
Тогда чем их доставать?
Я начинающий, ковыряюсь с API.
Или я просто не знаю нужную API?


 
Записан
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 06-11-2012 04:03 » 

Цитата
Где проводник берет иконки?
Информацию о том где брать иконки проводник берет из реестра.
Цитата
Например, для XP, подозреваю файл - C:\Documents and Settings\User\NTUSER.DAT.
Не совсем верные подозрения. Системные иконки находятся в библиотеках (.dll) с именами Win, win32 или аналогичных.
Цитата
Тогда чем их доставать?
Функциями для работы  с ресурсами.
Записан

С уважением, Oldy.
Klient
Новенький

by
Offline Offline

« Ответ #2 : 06-11-2012 05:05 » 

Если реестр, может, кто подскажет ветки?
Если .dll, то, функции для работы с ресурсами:
  LoadLibrary(_T("Не понялНе понял"));  Loadicon()?
Можно этими функциями достать иконку если известно расширение файла?

По моему, винда, где-то все-таки кэширует иконки,
и чем-то их достает из кэша?
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 06-11-2012 07:23 » 

Klient, ты хочешь получить набор иконок и добавить в свой проект или хочешь загружать в своей программе необходимые иконки сразу из коллекций системы?
« Последнее редактирование: 06-11-2012 07:25 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
zubr
Гость
« Ответ #4 : 06-11-2012 07:39 » 

Как я понял, надо отображать иконки соответствующие файлам, а не стандартные. Klient, смотри в сторону функции SHGetFileInfo.
Записан
sss
Специалист

ru
Offline Offline

« Ответ #5 : 06-11-2012 10:18 » 

Здесь весь  необходимый код .

Код:
HICON Shell32Icon( int iIconID, int cDesired) throw ( DWORD)
{
  HICON   hIcon;
  DWORD   dwErr;
  HMODULE hMod  = ::GetModuleHandle( TEXT("shell32.dll"));

  //Проверка загружен ли shell32.dll.. Попытка загрузить..
  if ( hMod == NULL && ( dwErr = ::GetLastError()) == ERROR_MOD_NOT_FOUND)
  {
    hMod = ::LoadLibraryEx( TEXT("shell32.dll"), NULL, LOAD_LIBRARY_AS_DATAFILE);
    if ( hMod == NULL) dwErr = ::GetLastError();
  }
  if ( hMod == NULL) throw dwErr;

  hIcon = (HICON) ::LoadImage( hMod, MAKEINTRESOURCE( iIconID), IMAGE_ICON, cDesired, cDesired, LR_SHARED);
  if ( hIcon == NULL) throw  ::GetLastError();
  return  hIcon;
}




Записан

while (8==8)
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #6 : 06-11-2012 10:27 » 

Эммм... это стандартные иконки Винды. А если это специальный файл? Например аудио/видео? Тогда ему будет присвоена иконка проги, зарегестрированной для этого расширения. Например VLC для .avi. Поэтому, если самому не хочется ковырятся в HKCR и доставать иконки из приложений (что в принципе не так уж и сложно), то я бы присоединился к совету воспользоваться ф-ей SHGetFileInfo.

Если реестр, может, кто подскажет ветки?

В HKCR находишь ключ с расширением, например, .avi.
Смотришь самое первое значение ключа, например, VLC.avi.

Теперь там же, в HKCR, смотришь ключ с именем VLC.avi. В нём есть подключ "DefaultIcon". Первое значение в нём содержит необходимую для тебя инфу - прогу и номер иконки. Например, "C:\Program Files\VideoLAN\VLC\vlc.exe",0

Цитата
По моему, винда, где-то все-таки кэширует иконки,
и чем-то их достает из кэша?

Да, где-то всё-таки она это делает, и при этом очень грязно. Поэтому, если ты хочешь сделать лучше - делай сам.

* ss1.gif (10.34 Кб - загружено 2533 раз.)
* ss2.gif (10.47 Кб - загружено 2457 раз.)
« Последнее редактирование: 06-11-2012 10:48 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Klient
Новенький

by
Offline Offline

« Ответ #7 : 07-11-2012 06:11 » 

Спасибо большое, теперь знаю куда копать, есть с чем разбираться,
есть что попробовать.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines