예제 #1
0
        public string GetRegisteredIcon(string filePath)
        {
            var ext = GetFileEntryType(filePath);

            if (CachedIcons.ContainsKey(ext))
            {
                return(CachedIcons[ext]);
            }

            var shinfo = new SHfileInfo();

            Win32.SHGetFileInfo(filePath, 0, ref shinfo, (uint)Marshal.SizeOf(shinfo),
                                Win32.SHGFI_ICON | Win32.SHGFI_SMALLICON);

            Icon icon;

            using (var origIcon = Icon.FromHandle(shinfo.hIcon))
            {
                icon = (Icon)origIcon.Clone();
            }
            Win32.DestroyIcon(shinfo.hIcon);
            var iconPath = saveIconLocal(icon, ext);

            CachedIcons.Add(ext, iconPath);
            return(iconPath);
        }
    public static System.Drawing.Icon GetRegisteredIcon(string filePath)
    {
        var shinfo = new SHfileInfo();

        Win32.SHGetFileInfo(filePath, 0, ref shinfo, (uint)Marshal.SizeOf(shinfo), Win32.SHGFI_ICON | Win32.SHGFI_SMALLICON);
        return(System.Drawing.Icon.FromHandle(shinfo.hIcon));
    }
        public static ImageSource GetRegisteredIcon(string filePath, int width, int height)
        {
            var        shinfo          = new SHfileInfo();
            const uint SHGFI_ICON      = 0x100;
            const uint SHGFI_SMALLICON = 0x1;

            SHGetFileInfo(filePath, 0, ref shinfo, (uint)Marshal.SizeOf(shinfo), SHGFI_ICON | SHGFI_SMALLICON);
            var icon      = Icon.FromHandle(shinfo.hIcon);
            var hBitmap   = icon.ToBitmap().GetHbitmap();
            var bmpSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
                hBitmap, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromWidthAndHeight(width, height));

            DeleteObject(hBitmap);
            return(bmpSource);
        }
 public static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes, ref SHfileInfo psfi, uint cbSizeFileInfo, uint uFlags);