Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> получение иконки файла 
V
    Опции темы
Skalik
Дата 29.10.2008, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



как получить системную иконку определенного типа файла, по его расширению?

Это сообщение отредактировал(а) Skalik - 29.10.2008, 00:38
PM MAIL ICQ   Вверх
diadiavova
Дата 29.10.2008, 02:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



По расширению скорее всего в реестре копаться надо, а вот для конкретного файла  - легко
Код

System.Drawing.Icon ic = System.Drawing.Icon.ExtractAssociatedIcon("имя файла");


Это сообщение отредактировал(а) diadiavova - 29.10.2008, 02:53


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Skalik
Дата 29.10.2008, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вытягивает нормально, только размер 16х16, а мне надо что б было 32х32!
Это возможно????
PM MAIL ICQ   Вверх
jonie
Дата 29.10.2008, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 22
Всего: 118



можно подтянуть из системы ShGetFileInfo (используя PInvoke)
только учитывая что там есть флаг SHGFI_USEFILEATTRIBUTES, который стоит снять, чтобы можно было подтянуть иконку не имея файла. (указать в pszPath вроде ".exe")

Добавлено @ 23:40
http://www.codeproject.com/KB/selection/FilesListBox.aspx
вот тут пример есть использующий это

Добавлено @ 23:41
http://www.vbaccelerator.com/home/VB/Utili...tor/article.asp
а вот тут пример чисто на .net на VB6.. можно дернуть через interop

Это сообщение отредактировал(а) jonie - 29.10.2008, 23:42


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Skalik
Дата 30.10.2008, 01:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



вытянуть, то вытягивает, но почему то плохое качество изображения...

PM MAIL ICQ   Вверх
diadiavova
Дата 30.10.2008, 02:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



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


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Skalik
Дата 30.10.2008, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



когда я вытягиваю 16х16 все равно качество плохое
вытягиваю вот так 
Icon ic = Icon.ExtractAssociatedIcon(dir_.FullName);

Присоединённый файл ( Кол-во скачиваний: 26 )
Присоединённый файл  untitled.JPG 5,68 Kb
PM MAIL ICQ   Вверх
jonie
Дата 30.10.2008, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 22
Всего: 118



цветов количество малое извлекается. я ал примеры где через PInvoke делается, там все ок будет.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Skalik
Дата 30.10.2008, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



юзаю этот класс
Код

class IconExtractor
    {
        [StructLayout(LayoutKind.Sequential)]
        public struct SHFILEINFO
        {
            public IntPtr hIcon;
            public IntPtr iIcon;
            public uint dwAttributes;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
            public string szDisplayName;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]
            public string szTypeName;
        };
        
        class Win32
        {
            public const uint SHGFI_ICON = 0x100;
            public const uint SHGFI_LARGEICON = 0x0;    // 'Large icon
            public const uint SHGFI_SMALLICON = 0x1;    // 'Small icon

            [DllImport("shell32.dll")]
            public static extern IntPtr SHGetFileInfo(string pszPath,
                                        uint dwFileAttributes,
                                        ref SHFILEINFO psfi,
                                        uint cbSizeFileInfo,
                                        uint uFlags);
        }   
       
        /// <summary>
        /// Gets the icon asotiated with the filename.
        /// </summary>
        /// <param name="fileName"></param>
        /// <returns></returns>
        public static Icon GetFileIcon(string fileName, IconSize _iconSize)
        {
            System.Drawing.Icon myIcon = null;
            try
            {
                IntPtr hImgSmall;    //the handle to the system image list
                SHFILEINFO shinfo = new SHFILEINFO();

                //Use this to get the small Icon
                hImgSmall = Win32.SHGetFileInfo(fileName, 0, ref shinfo,
                                                (uint)Marshal.SizeOf(shinfo),
                                                Win32.SHGFI_ICON |
                                               (_iconSize == IconSize.Small ? Win32.SHGFI_SMALLICON : Win32.SHGFI_LARGEICON) );

                //The icon is returned in the hIcon member of the shinfo
                //struct
                myIcon =
                        System.Drawing.Icon.FromHandle(shinfo.hIcon);
            }
            catch
            {
                return null;
            }
            return myIcon;
        }   
    }

вот так вызываю
Код

IconSize _fileIconSize = IconSize.Small;
 icon2 = IconExtractor.GetFileIcon(dir_.FullName, _fileIconSize);

качество по прежнему все тоже, не могу понять почему, в том проекте откуда вытянул код все работает отлично, картинки идеальные....
PM MAIL ICQ   Вверх
Skalik
Дата 2.11.2008, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



понял в чем была проблема, я просто после получения картинки запихивал ее в ImageList, там и терялось качество
прописал 
Код

im.ColorDepth= System.Windows.Forms.ColorDepth.Depth32Bit; 

и все отлично заработало...
PM MAIL ICQ   Вверх
Rohoss
Дата 29.8.2009, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


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

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



Цитата(jonie @  29.10.2008,  23:38 Найти цитируемый пост)
только учитывая что там есть флаг SHGFI_USEFILEATTRIBUTES, который стоит снять, чтобы можно было подтянуть иконку не имея файла. (указать в pszPath вроде ".exe")

А как это сделать?

Добавлено через 10 минут и 46 секунд
Разобрался
Код

class Win32
{
public const uint SHGFI_USEFILEATTRIBUTES = 0x000000010;
.............................


Код

                hImgSmall = Win32.SHGetFileInfo(fileName, 0, ref shinfo,
                                                (uint)Marshal.SizeOf(shinfo),
                                                Win32.SHGFI_ICON |
                                               (_iconSize == IconSize.Small ? Win32.SHGFI_SMALLICON : Win32.SHGFI_LARGEICON | Win32.SHGFI_USEFILEATTRIBUTES));



--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


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

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


 




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


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

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