日期:2014-05-20  浏览次数:20795 次

怎么从文件中提取图标
给我一份,690488311@163.com


------解决方案--------------------
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);
}