public static Bitmap GetFileIcon(IntPtr fileName, IconSize size) { SHFILEINFO shinfo = new SHFILEINFO(); uint flags = SHGFI_SYSICONINDEX | SHGFI_USEFILEATTRIBUTES | SHGFI_PIDL; if (size == IconSize.small) flags = flags | SHGFI_ICON | SHGFI_SMALLICON; else flags = flags | SHGFI_ICON; SHGetFileInfo(fileName, 0, ref shinfo, (uint)Marshal.SizeOf(shinfo), flags); return shinfo.hIcon != IntPtr.Zero ? Icon.FromHandle(shinfo.hIcon).ToBitmap() : new Bitmap(1, 1); }
// <summary> /// Return large file icon of the specified file. /// </summary> public static Bitmap GetFileIcon(string fileName, IconSize size) { if (fileName.StartsWith(".")) fileName = "AAA" + fileName; SHFILEINFO shinfo = new SHFILEINFO(); uint flags = SHGFI_SYSICONINDEX; if (fileName.IndexOf(":") == -1) flags = flags | SHGFI_USEFILEATTRIBUTES; if (size == IconSize.small) flags = flags | SHGFI_ICON | SHGFI_SMALLICON; else flags = flags | SHGFI_ICON; SHGetFileInfo(fileName, 0, ref shinfo, (uint)Marshal.SizeOf(shinfo), flags); Bitmap retVal = shinfo.hIcon != IntPtr.Zero ? Icon.FromHandle(shinfo.hIcon).ToBitmap() : new Bitmap(1, 1); if (!retVal.Size.Equals(IconSizeToSize(size))) return resizeImage(retVal, IconSizeToSize(size), 0); return retVal; }
protected static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, uint cbSizeFileInfo, uint uFlags);