| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- using System;
- using System.Collections.Generic;
- using System.Drawing;
- using System.Linq;
- using System.Runtime.InteropServices;
- using System.Text;
- using System.Threading.Tasks;
- namespace GeekDesk.Util
- {
- public static class DefaultIcons
- {
- private static Icon folderIcon;
- public static Icon FolderLarge => folderIcon ?? (folderIcon = GetStockIcon(SHGSI_ICON, SHGSI_LARGEICON));
- public static Icon GetStockIcon(uint type, uint size)
- {
- var info = new SHSTOCKICONINFO();
- info.cbSize = (uint)Marshal.SizeOf(info);
- SHGetStockIconInfo(type, SHGSI_ICON | size, ref info);
- var icon = (Icon)Icon.FromHandle(info.hIcon).Clone(); // Get a copy that doesn't use the original handle
- DestroyIcon(info.hIcon); // Clean up native icon to prevent resource leak
- return icon;
- }
- [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
- public struct SHSTOCKICONINFO
- {
- public uint cbSize;
- public IntPtr hIcon;
- public int iSysIconIndex;
- public int iIcon;
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
- public string szPath;
- }
- [DllImport("shell32.dll")]
- public static extern int SHGetStockIconInfo(uint siid, uint uFlags, ref SHSTOCKICONINFO psii);
- [DllImport("user32.dll")]
- public static extern bool DestroyIcon(IntPtr handle);
- public static uint SHSIID_FOLDER = 0x3;
- public static uint SHGSI_ICON = 0x100;
- public static uint SHGSI_LARGEICON = 0x0;
- public static uint SHGSI_SMALLICON = 0x1;
- }
- }
|