Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как по расширению файла получить хендл иконки 
:(
    Опции темы
Alca
Дата 29.10.2009, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



По расширению файла получить хендл иконки? Т.е. получить иконки связанные с конкретным типом файла.

Добавлено через 2 минуты и 31 секунду
Кроме как из реестра выдрать можно?


--------------------
PM WWW ICQ Skype Jabber   Вверх
smoke_man
Дата 29.10.2009, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: 9
Всего: 17



Попробуй так:
Код

UnicodeString path = "";
    if(!OpenDialog1->Execute())
        return;
    path = OpenDialog1->FileName;

    SHFILEINFOW info;

    SHGetFileInfoW(path.w_str(), FILE_ATTRIBUTE_NORMAL, &info, sizeof(info),
    SHGFI_ICON | SHGFI_USEFILEATTRIBUTES | SHGFI_SMALLICON);
    ICONINFO stIconInfo;
    GetIconInfo(info.hIcon, &stIconInfo);
    HBITMAP hBmp = stIconInfo.hbmColor;

    Image1->Picture->Bitmap->Handle = hBmp;
    DestroyIcon(info.hIcon);


Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  Icon.rar 6,08 Kb


--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
Alca
Дата 29.10.2009, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Файла нет на диске, есть только имя. И по расширению надо достать иконку (хендл).


--------------------
PM WWW ICQ Skype Jabber   Вверх
smoke_man
Дата 29.10.2009, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: 9
Всего: 17



А почему бы для этого не использовать реестр?


--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
A5uKa
Дата 29.10.2009, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: 2
Всего: 16



Цитата(Alca @ 29.10.2009,  22:32)
Файла нет на диске, есть только имя. И по расширению надо достать иконку (хендл).

Создать файл   smile 
Хотя мне кажется без реестра не обойдётся ...

Это сообщение отредактировал(а) A5uKa - 29.10.2009, 22:51
PM   Вверх
Alca
Дата 29.10.2009, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



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

#include <registry.hpp>
//---------------------------------------------------------------------------
HICON hGetAssociatedIcon(const tString &csFileExt) {               

    bool  bRes = false;
    int   iRes = - 1;

    tString sTemp = csFileExt;

    if (_T('.') != sTemp[1]) {
        sTemp = _T(".") + sTemp;
    }

    std::auto_ptr<TRegistry> apregReg(new TRegistry());
    /*debug*/XASSERT(NULL != apregReg.get());
    
    apregReg->RootKey = HKEY_LOCAL_MACHINE;
    
    bRes = apregReg->OpenKey(_T("Software\\CLASSES"), false);
    /*DEDUG*/XASSERT(true == bRes);
    
    bRes = apregReg->OpenKey(sTemp, false);
    /*DEDUG*/XASSERT(true == bRes);
    
    sTemp = apregReg->ReadString(_T(""));    //(Default)
    /*DEDUG*/XASSERT(false == sTemp.IsEmpty());
    
    bRes = apregReg->OpenKey(_T("\\Software\\CLASSES\\") + sTemp + _T("\\DefaultIcon"), false);
    /*DEDUG*/XASSERT(true == bRes);

    sTemp  = apregReg->ReadString("");
    /*DEDUG*/XASSERT(true == bRes);
    
    if (sTemp == _T("%1") || sTemp == _T("\"%1\"")) {
        return NULL;
    }

    int iPos   = sTemp.LastDelimiter(_T(","));
    int iIndex = sTemp.SubString(iPos + 1, sTemp.Length() - iPos).ToInt();

    sTemp.Delete(iPos, sTemp.Length() - iPos + 1).Trim();

    //удаляем кавычки
    if ('"' == sTemp[1]) {
        sTemp.Delete(1, 1);        
    }
    if ('"' == sTemp[sTemp.Length()]) {
        sTemp.Delete(sTemp.Length(), 1);        
    } 
    //ShowMessage(sTemp);

    HICON hIconLarge = NULL; 
    HICON hIconSmall = NULL;
    iRes = ::ExtractIconEx(sTemp.c_str(), 0, &hIconLarge, &hIconSmall, 1); 
    /*DEDUG*/XASSERT(- 1 != iRes); 
    
    return hIconSmall; 
}
//---------------------------------------------------------------------------


Добавлено через 35 секунд
Иконки нужны для TListView


--------------------
PM WWW ICQ Skype Jabber   Вверх
smoke_man
Дата 29.10.2009, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: 9
Всего: 17



Посмотри еще тут, правда на C#, но описан алгоритм поиска.


--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
Alca
Дата 29.10.2009, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Цитата

Посмотри еще тут, правда на C#, но описан алгоритм поиска.

У тебя случаем шарп не стоит на тачке? Хочу екзешник потестить у себя...

Это сообщение отредактировал(а) Alca - 29.10.2009, 23:31


--------------------
PM WWW ICQ Skype Jabber   Вверх
kemiisto
Дата 29.10.2009, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: нет
Всего: 160



Цитата(Alca @  30.10.2009,  00:12 Найти цитируемый пост)
У тебя случаем шарп не стоит на тачке? Хлчу екзешник потестить у себя...

Капитан Очевидность предупреждает: для того, чтоб "потестить" приложение .NET, необходимо наличие .NET Framework. А его наличие гарантирует наличие компилятора С#. smile 


--------------------
PM MAIL WWW GTalk Jabber   Вверх
Alca
Дата 29.10.2009, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Цитата

апитан Очевидность предупреждает: для того, чтоб "потестить" приложение .NET, необходимо наличие .NET Framework. А его наличие гарантирует наличие компилятора С#. 

 smile

Добавлено через 46 секунд
мне че msbuild-ом компилить студийный проект ????  smile 


--------------------
PM WWW ICQ Skype Jabber   Вверх
smoke_man
Дата 29.10.2009, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: 9
Всего: 17



Шарп стоит установлен.


--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
Alca
Дата 30.10.2009, 00:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Цитата

Шарп стоит установлен.
 smile 
Можешь скомпилить пример?

Добавлено через 15 секунд
А то у меня места фанарь


--------------------
PM WWW ICQ Skype Jabber   Вверх
smoke_man
Дата 30.10.2009, 00:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: 9
Всего: 17



Ща сделаемс smile

Добавлено через 4 минуты и 17 секунд
Лови.

Присоединённый файл ( Кол-во скачиваний: 12 )
Присоединённый файл  FileTypeAndIcon.rar 6,50 Kb


--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
Alca
Дата 30.10.2009, 00:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



smile

Добавлено через 1 минуту и 55 секунд
Работает корректно. Буду ковырять сорцы.
smoke_man, спасибо.


--------------------
PM WWW ICQ Skype Jabber   Вверх
smoke_man
Дата 30.10.2009, 00:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: 9
Всего: 17



Не за что!


--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0542 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.