日期:2014-05-20 浏览次数:20846 次
using System.Runtime.InteropServices; [StructLayout(LayoutKind.Sequential)] private struct SHFILEINFO { public SHFILEINFO(bool b) { hIcon=IntPtr.Zero;iIcon=0;dwAttributes=0;szDisplayName="";szTypeName=""; } public IntPtr hIcon; public int iIcon; public uint dwAttributes; [MarshalAs(UnmanagedType.LPStr, SizeConst=260)] public string szDisplayName; [MarshalAs(UnmanagedType.LPStr, SizeConst=80)] public string szTypeName; }; private enum SHGFI { SHGFI_ICON = 0x000000100, // get icon SHGFI_DISPLAYNAME = 0x000000200, // get display name SHGFI_TYPENAME = 0x000000400, // get type name SHGFI_ATTRIBUTES = 0x000000800, // get attributes SHGFI_ICONLOCATION = 0x000001000, // get icon location SHGFI_EXETYPE = 0x000002000, // return exe type SHGFI_SYSICONINDEX = 0x000004000, // get system icon index SHGFI_LINKOVERLAY = 0x000008000, // put a link overlay on icon SHGFI_SELECTED = 0x000010000, // show icon in selected state SHGFI_ATTR_SPECIFIED = 0x000020000, // get only specified attributes SHGFI_LARGEICON = 0x000000000, // get large icon SHGFI_SMALLICON = 0x000000001, // get small icon SHGFI_OPENICON = 0x000000002, // get open icon SHGFI_SHELLICONSIZE = 0x000000004, // get shell size icon SHGFI_PIDL = 0x000000008, // pszPath is a pidl SHGFI_USEFILEATTRIBUTES = 0x000000010 // use passed dwFileAttribute } [DllImport("Shell32.dll")] private static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes,out SHFILEINFO psfi, uint cbfileInfo, SHGFI uFlags ); public static Icon GetIcon(string strPath, bool selected) { SHFILEINFO info = new SHFILEINFO(true); int cbFileInfo = Marshal.SizeOf(info); SHGFI flags; if (!selected) flags = SHGFI.SHGFI_ICON|SHGFI.SHGFI_SMALLICON; else flags = SHGFI.SHGFI_ICON|SHGFI.SHGFI_SMALLICON|SHGFI.SHGFI_OPENICON; SHGetFileInfo(strPath, 256, out info,(uint)cbFileInfo, flags); return Icon.FromHandle(info.hIcon); }