Mega Code Archive

 
Categories / C# / 2D Graphics
 

Icon Extraction

using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Drawing; using System.Runtime.InteropServices; namespace AjGenesisStudio.Utils {     class IconExtraction     {         public static int GetIcon(ImageList images, string extension)         {             return GetIcon(images, extension, false);         }         public static int GetIcon(ImageList images, string extension, bool largeIcon)         {             for (int i = 0; i < images.Images.Count; i++)                 if (images.Images.Keys[i] == extension)                     return i;             images.Images.Add(extension, ExtractIconForExtension(extension, largeIcon));             return images.Images.Count - 1;         }         public static Icon ExtractIconForExtension(string extension, bool large)         {             if (extension != null)             {                 //let's just make up a file name with that extension                 string fictitiousFile = "0" + extension;                 //now get the icon for that file                 return GetAssociatedIcon(fictitiousFile, large);             }             else             {                 throw new ArgumentException("Invalid file or extension.", "fileOrExtension");             }         }         public static Icon GetAssociatedIcon(string stubPath, bool large)         {             SHFILEINFO info = new SHFILEINFO(true);             int cbFileInfo = Marshal.SizeOf(info);             SHGFI flags;             if (large)                 flags = SHGFI.Icon | SHGFI.LargeIcon | SHGFI.UseFileAttributes;             else                 flags = SHGFI.Icon | SHGFI.SmallIcon | SHGFI.UseFileAttributes;             SHGetFileInfo(stubPath, 256, out info, (uint)cbFileInfo, flags);             return (Icon)Icon.FromHandle(info.hIcon);         }         #region Win32 API imports         [DllImport("shell32.dll", CharSet = CharSet.Auto)]         private static extern int SHGetFileInfo(             string pszPath,             int dwFileAttributes,             out    SHFILEINFO psfi,             uint cbfileInfo,             SHGFI uFlags);         private const int MAX_PATH = 260;         private const int MAX_TYPE = 80;         private struct SHFILEINFO         {             public SHFILEINFO(bool b)             {                 hIcon = IntPtr.Zero;                 iIcon = 0;                 dwAttributes = 0;                 szDisplayName = "";                 szTypeName = "";             }             public IntPtr hIcon;             public int iIcon;             public uint dwAttributes;             [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_PATH)]             public string szDisplayName;             [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_TYPE)]             public string szTypeName;         };         [Flags]         enum SHGFI : int         {             /// <summary>get icon</summary>             Icon = 0x000000100,             /// <summary>get display name</summary>             DisplayName = 0x000000200,             /// <summary>get type name</summary>             TypeName = 0x000000400,             /// <summary>get attributes</summary>             Attributes = 0x000000800,             /// <summary>get icon location</summary>             IconLocation = 0x000001000,             /// <summary>return exe type</summary>             ExeType = 0x000002000,             /// <summary>get system icon index</summary>             SysIconIndex = 0x000004000,             /// <summary>put a link overlay on icon</summary>             LinkOverlay = 0x000008000,             /// <summary>show icon in selected state</summary>             Selected = 0x000010000,             /// <summary>get only specified attributes</summary>             Attr_Specified = 0x000020000,             /// <summary>get large icon</summary>             LargeIcon = 0x000000000,             /// <summary>get small icon</summary>             SmallIcon = 0x000000001,             /// <summary>get open icon</summary>             OpenIcon = 0x000000002,             /// <summary>get shell size icon</summary>             ShellIconize = 0x000000004,             /// <summary>pszPath is a pidl</summary>             PIDL = 0x000000008,             /// <summary>use passed dwFileAttribute</summary>             UseFileAttributes = 0x000000010,             /// <summary>apply the appropriate overlays</summary>             AddOverlays = 0x000000020,             /// <summary>Get the index of the overlay in the upper 8 bits of the iIcon</summary>             OverlayIndex = 0x000000040,         }         #endregion     } }