当前位置: 代码迷 >> .NET面试 >> 如何从文件中提取图标
  详细解决方案

如何从文件中提取图标

热度:16   发布时间:2016-05-02 20:44:55.0
怎么从文件中提取图标
给我一份,[email protected]


------解决方案--------------------
C# code
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);}
  相关解决方案