Отправляет email-рассылки с помощью сервиса Sendsay

Дневник программиста

  Все выпуски  

Дневник программиста Извлечение иконки файла


Извлечение иконки ассоциированной с файлом

http://krestor.livejournal.com/

     В ходе разработки программы поиска для кпк понадобилось получить иконки ассоциированные с файлом. Перелопатив пол msdn'a, я так и не нашел метода .NET Compact Framework, который это делает. Зато нашел хорошую функцию WinApi - SHGetFileInfo.
И к счастью оказалось, что она поддеривается в Windows CE.  Конечно не хотелось использовать native код, но делать нечего и я быстренько написал метод возвращающий иконку.

Для тех кому интересно вот он(написан на C#):



  public class CommonFunc
       {

          [StructLayout(LayoutKind.Sequential)]
           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;
           }

           const uint SHGFI_SmallIcon = 0x00000001;
           const uint SHGFI_LargeIcon = 0x00000000;
           const uint SHGFI_Icon = 0x00000100;
          


        [DllImport("coredll.dll")]
        private static extern IntPtr SHGetFileInfo(string pszPath,
                                                   uint dwFileAttributes,
                                                   ref SHFILEINFO psfi,
                                                   uint cbfileInfo,
                                                   uint uFlags);

        public static Icon GetFileIcon(string fullFileName)
        {
            SHFILEINFO info = new SHFILEINFO();
          
            IntPtr Res = SHGetFileInfo(fullFileName, 0, ref info, (uint)Marshal.SizeOf(info),SHGFI_Icon|SHGFI_SmallIcon);

            return Icon.FromHandle(info.hIcon);

        }

        public static Icon GetLargeFileIcon(string fullFileName)
          {
              SHFILEINFO info = new SHFILEINFO();

              IntPtr Res = SHGetFileInfo(fullFileName, 0, ref info, (uint)Marshal.SizeOf(info), SHGFI_Icon | SHGFI_LargeIcon);

              return Icon.FromHandle(info.hIcon);

          }

    }


 


В избранное