информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Все любят медГде водятся OGRы
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
ExtractAssociatedIcon 26.10.02 04:47  Число просмотров: 2004
Автор: Killer{R} <Dmitry> Статус: Elderman
<"чистая" ссылка>
char *cts="c:\\autoexec.bat";
unsigned short dw=0;
HICON hi=ExtractAssociatedIcon(HInstance,cts,&dw);
<programming>
[Win32] Как получить иконку файла, зная его расширение 26.10.02 03:34  
Автор: Disappear Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Есть расширение зарегистированное в системе или не зарегистрированное, например "txt", нужно получить иконку этого файла - ту которую использует windows.
Можно ли обойтись без сканирования реестра, если нет, то как лучше загружать иконки.
Может быть для это есть какие функции Shell ?
ExtractAssociatedIcon 26.10.02 04:47  
Автор: Killer{R} <Dmitry> Статус: Elderman
<"чистая" ссылка>
char *cts="c:\\autoexec.bat";
unsigned short dw=0;
HICON hi=ExtractAssociatedIcon(HInstance,cts,&dw);
[Win32] А если нет такого файла, а есть только расширение? 27.10.02 00:13  
Автор: Disappear Статус: Незарегистрированный пользователь
<"чистая" ссылка>
У меня эта функция вообще в любых случаях выдает 0х00000
А если нет такого файла, а есть только расширение?
Лезь в реестр и ищи файл с иконкой. Не вижу в этом ничего сложного. 27.10.02 10:36  
Автор: Glory <Mr. Glory> Статус: Elderman
Отредактировано 27.10.02 10:38  Количество правок: 1
<"чистая" ссылка>
То есть нада тебе иконку для файла *.bmp. Открываешь HKEY_CLASSES_ROOT\.bmp, там читаешь значение (default), получишь напр. Paint.Picture, переходишь HKEY_CLASSES_ROOT\Paint.Picture\DefaultIcon, там будет файл с иконкой и ее порядковый номер в файле.
Но если уж совсем в реестр лезть неохота - создаешь пустой файл с нужным тебе расширением и выполняешь ExtractAssociatedIcon().
Вот что получилось 28.10.02 02:05  
Автор: Disappear Статус: Незарегистрированный пользователь
<"чистая" ссылка>
HICON LoadIconFromExt(LPCTSTR szExt, bool LargeIcon)
{
CRegKey key;
TCHAR szTemp[MAX_PATH];
szTemp[0] = 0;
CString sExt(szExt);
int pos = sExt.ReverseFind('.');
if (pos > 0)
sExt = sExt.Right(sExt.GetLength() - pos);
sExt.MakeLower();

HICON hIcon = NULL;
CString sLocation;
UINT index = 0;

if (key.Open(HKEY_CLASSES_ROOT, sExt) == ERROR_SUCCESS)
{
TCHAR szValue[100];
szValue[0] = 0;
DWORD count = 100;
key.QueryValue(szValue, NULL, &count);
key.Close();
if (szValue[0])
{
CString sKey(szValue);
sKey += "\\DefaultIcon";
if (key.Open(HKEY_CLASSES_ROOT, sKey) == ERROR_SUCCESS)
{
count = MAX_PATH;
key.QueryValue(szTemp,NULL, &count);
CString str(szTemp);
int pos = str.ReverseFind(',');
if (pos == -1) pos = str.ReverseFind('%');
if (pos > 0)
index = atoi(str.Right(str.GetLength() - pos - 1));
str = str.Left(pos);
sLocation = str;
key.Close();
}
if (sLocation.GetLength() < 2)
{
sKey = szValue;
sKey += "\\shell\\open\\command";
if (key.Open(HKEY_CLASSES_ROOT, sKey) == ERROR_SUCCESS)
{
count = MAX_PATH;
key.QueryValue(szTemp,NULL, &count);
sLocation = szTemp;
int pos = sLocation.ReverseFind('\"');
if (pos > 0)
sLocation = sLocation.Left(pos);
sLocation.Replace("\"","");
key.Close();
}
}
}
}
if (!sLocation.IsEmpty())
{
if (LargeIcon)
ExtractIconEx(sLocation, index, &hIcon, NULL, 1);
else
ExtractIconEx(sLocation, index, NULL, &hIcon, 1);
}
if (!hIcon)
{
CString str = "%SystemRoot%\\system32\\shell32.dll";
int index;
if (sExt == ".exe")
index = 2;
else
index = 0;
if (LargeIcon)
ExtractIconEx(str, index, &hIcon, NULL, 1);
else
ExtractIconEx(str, index, NULL, &hIcon, 1);
}
return hIcon;
}
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach