using System; using System.Collections.Generic; using System.Drawing; using System.Runtime.InteropServices; using System.Text; namespace AutoPekage { class GetIcon { [StructLayout(LayoutKind.Sequential)] public struct SHFILEINFO { public IntPtr hIcon; public IntPtr iIcon; public uint dwAttributes; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] public string szDisplayName; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)] public string szTypeName; } /// /// 返回系统设置的图标 /// /// 文件路径 如果为"" 返回文件夹的 /// 0 /// 结构体 /// 结构体大小 /// 枚举类型 /// -1失败 [DllImport("shell32.dll")] public static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, uint cbSizeFileInfo, uint uFlags); public enum SHGFI { SHGFI_ICON = 0x100, SHGFI_LARGEICON = 0x0, SHGFI_USEFILEATTRIBUTES = 0x10 } /// /// 获取文件图标 zgke@sina.com qq:116149 /// /// 文件全路径 /// 图标 public static Icon GetFileIcon(string p_Path) { SHFILEINFO _SHFILEINFO = new SHFILEINFO(); IntPtr _IconIntPtr = SHGetFileInfo(p_Path, 0, ref _SHFILEINFO, (uint)Marshal.SizeOf(_SHFILEINFO), (uint)(SHGFI.SHGFI_ICON | SHGFI.SHGFI_LARGEICON | SHGFI.SHGFI_USEFILEATTRIBUTES)); if (_IconIntPtr.Equals(IntPtr.Zero)) return null; Icon _Icon = System.Drawing.Icon.FromHandle(_SHFILEINFO.hIcon); return _Icon; } /// /// 获取文件夹图标 zgke@sina.com qq:116149 /// /// 图标 public static Icon GetDirectoryIcon() { SHFILEINFO _SHFILEINFO = new SHFILEINFO(); IntPtr _IconIntPtr = SHGetFileInfo(@"", 0, ref _SHFILEINFO, (uint)Marshal.SizeOf(_SHFILEINFO), (uint)(SHGFI.SHGFI_ICON | SHGFI.SHGFI_LARGEICON)); if (_IconIntPtr.Equals(IntPtr.Zero)) return null; Icon _Icon = System.Drawing.Icon.FromHandle(_SHFILEINFO.hIcon); return _Icon; } } }