Example #1
0
        private static uint ToFileIconFlags(IconSize size, FileIconOptions options)
        {
            uint flags = NativeMethods.SHGFI_ICON;

            switch (size)
            {
            case IconSize.Large:
                flags |= NativeMethods.SHGFI_LARGEICON;
                break;

            case IconSize.Small:
                flags |= NativeMethods.SHGFI_SMALLICON;
                break;

            case IconSize.ShellSize:
                flags |= NativeMethods.SHGFI_SHELLICONSIZE;
                break;
            }
            if ((options & FileIconOptions.LinkOverlay) == FileIconOptions.LinkOverlay)
            {
                flags |= NativeMethods.SHGFI_LINKOVERLAY;
            }
            if ((options & FileIconOptions.Selected) == FileIconOptions.Selected)
            {
                flags |= NativeMethods.SHGFI_SELECTED;
            }
            if ((options & FileIconOptions.OpenIcon) == FileIconOptions.OpenIcon)
            {
                flags |= NativeMethods.SHGFI_OPENICON;
            }
            if ((options & FileIconOptions.Overlays) == FileIconOptions.Overlays)
            {
                flags |= NativeMethods.SHGFI_ADDOVERLAYS;
            }
            if ((options & FileIconOptions.DoNotAccessFile) == FileIconOptions.DoNotAccessFile)
            {
                flags |= NativeMethods.SHGFI_USEFILEATTRIBUTES;
            }
            return(flags);
        }
Example #2
0
        public static Icon GetFileIcon(string filePath, IconSize size = IconSize.Large, FileIconOptions options = 0, System.IO.FileAttributes attributes = System.IO.FileAttributes.Normal)
        {
            var flags = ToFileIconFlags(size, options);
            var sfi   = new UnsafeNativeMethods.SHFILEINFO();

            IntPtr sysImageList = UnsafeNativeMethods.SHGetFileInfo(filePath, attributes, ref sfi, UnsafeNativeMethods.SHFILEINFO.Sizeof(), flags);

            if (sysImageList == IntPtr.Zero)
            {
                throw new Win32Exception("SHGetFileIconInfo failed.");
            }
            if (sfi.hIcon == IntPtr.Zero)
            {
                throw new Win32Exception("SHGetFileIconInfo failed.");
            }

            return(HIconToIcon(sfi.hIcon));
        }