Esempio n. 1
0
        public static ImageSource GetStockIconImage(ShStockIconId iconId, bool large, bool getSystemIcon)
        {
            BitmapSource imageSource;

            if (Environment.OSVersion.Version.Major >= 6 && !getSystemIcon)
            {
                var sii = new ShStockIconInfo {
                    cbSize = (UInt32)Marshal.SizeOf(typeof(ShStockIconInfo))
                };

                int errCode = Shell32.SHGetStockIconInfo(iconId, ShGSI.SHGSI_ICON | (large ? ShGSI.SHGSI_LARGEICON : ShGSI.SHGSI_SMALLICON) | ShGSI.SHGSI_SHELLICONSIZE, ref sii);
                Marshal.ThrowExceptionForHR(errCode);

                imageSource = Imaging.CreateBitmapSourceFromHIcon(sii.hIcon, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
                User32.DestroyIcon(sii.hIcon);
            }
            else
            {
                Icon icon;
                switch (iconId)
                {
                case ShStockIconId.SIID_APPLICATION:
                    icon = SystemIcons.Application;
                    break;

                case ShStockIconId.SIID_HELP:
                    icon = SystemIcons.Question;
                    break;

                case ShStockIconId.SIID_ERROR:
                    icon = SystemIcons.Error;
                    break;

                case ShStockIconId.SIID_INFO:
                    icon = SystemIcons.Information;
                    break;

                case ShStockIconId.SIID_WARNING:
                    icon = SystemIcons.Warning;
                    break;

                case ShStockIconId.SIID_SHIELD:
                    icon = SystemIcons.Shield;
                    break;

                default:
                    throw new ArgumentException($@"No system icon available for {iconId}", nameof(iconId));
                }

                imageSource = Imaging.CreateBitmapSourceFromHIcon(icon.Handle, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
            }

            return(imageSource);
        }
Esempio n. 2
0
        private static BitmapSource GetWindowsIcon(WindowsIconKey icon)
        {
            if (icons.TryGetValue(icon, out var source))
            {
                return(source);
            }

            var info = new ShStockIconInfo();

            info.cbSize = (uint)Marshal.SizeOf(info);

            SHGetStockIconInfo(icon.Type, SHGSI_ICON | icon.Size, ref info);
            // var bitmapSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(info.hIcon, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
            using var iconDrawing = Icon.FromHandle(info.hIcon);
            using var bitmap      = iconDrawing.ToBitmap();

            var hBitmap = bitmap.GetHbitmap();

            try
            {
                BitmapSizeOptions size;
                switch (icon.Size)
                {
                case SHGSI_SMALLICON:
                    size = BitmapSizeOptions.FromWidthAndHeight(16, 16);
                    break;

                default:
                    size = BitmapSizeOptions.FromWidthAndHeight(32, 32);
                    break;
                }

                var wpfBitmap = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
                    hBitmap,
                    IntPtr.Zero,
                    Int32Rect.Empty,
                    size);
                wpfBitmap.Freeze();

                icons[icon] = wpfBitmap;
                return(wpfBitmap);
            }
            finally
            {
                DeleteObject(hBitmap);
                DestroyIcon(info.hIcon);
            }
        }
Esempio n. 3
0
 internal static extern Int32 SHGetStockIconInfo(ShStockIconId siid, ShGSI uFlags, ref ShStockIconInfo psii);
Esempio n. 4
0
 private static extern int SHGetStockIconInfo(uint siid, uint uFlags, ref ShStockIconInfo psii);