黑马程序员技术交流社区

标题: C#怎么获取文件默认图标 [打印本页]

作者: StartHeiMa    时间: 2014-7-16 14:00
标题: C#怎么获取文件默认图标
本帖最后由 StartHeiMa 于 2014-7-17 04:11 编辑

C#怎么获取文件默认图标,就是在资源管理器中看到的哪个图标。.EXE文件和其他数据文件使用的方法相同吗?
作者: StartHeiMa    时间: 2014-7-16 21:54
已解决
添加引用System.Drawing
  1. using System;
  2. using System.IO;
  3. using System.Runtime.InteropServices;
  4. using System.Drawing;

  5. namespace test8
  6. {
  7.     class FileIcon
  8.     {
  9.         [StructLayout(LayoutKind.Sequential)]
  10.         public struct SHFILEINFO
  11.         {
  12.             public IntPtr hIcon;
  13.             public IntPtr iIcon;
  14.             public uint dwAttributes;
  15.             [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
  16.             public string szDisplayName;
  17.             [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]
  18.             public string szTypeName;
  19.         }
  20.         public enum SHGFI
  21.         {
  22.             SHGFI_ICON = 0x100,
  23.             SHGFI_LARGEICON = 0x0,
  24.             SHGFI_USEFILEATTRIBUTES = 0x10
  25.         }
  26.         [DllImport("shell32.dll")]
  27.         public static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes, ref   SHFILEINFO psfi, uint cbSizeFileInfo, uint uFlags);
  28.         /// <summary>
  29.         /// 获取文件图标
  30.         /// </summary>
  31.         /// <param name="p_Path">文件路径</param>
  32.         /// <returns></returns>
  33.         public Icon GetFileIcon(string p_Path)
  34.         {
  35.             SHFILEINFO _SHFILEINFO = new SHFILEINFO();
  36.             IntPtr _IconIntPtr = SHGetFileInfo(p_Path, 0, ref _SHFILEINFO, (uint)Marshal.SizeOf(_SHFILEINFO), (uint)(SHGFI.SHGFI_ICON | SHGFI.SHGFI_LARGEICON | SHGFI.SHGFI_USEFILEATTRIBUTES));
  37.             if (_IconIntPtr.Equals(IntPtr.Zero)) return null;
  38.             Icon _Icon = System.Drawing.Icon.FromHandle(_SHFILEINFO.hIcon);
  39.             return _Icon;
  40.         }
  41.         /// <summary>
  42.         /// 获取文件夹图标
  43.         /// </summary>
  44.         /// <returns></returns>
  45.         public Icon GetDirectoryIcon()
  46.         {
  47.             SHFILEINFO _SHFILEINFO = new SHFILEINFO();
  48.             IntPtr _IconIntPtr = SHGetFileInfo(@"", 0, ref _SHFILEINFO, (uint)Marshal.SizeOf(_SHFILEINFO), (uint)(SHGFI.SHGFI_ICON | SHGFI.SHGFI_LARGEICON));
  49.             if (_IconIntPtr.Equals(IntPtr.Zero)) return null;
  50.             Icon _Icon = System.Drawing.Icon.FromHandle(_SHFILEINFO.hIcon);
  51.             return _Icon;
  52.         }
  53.     }
  54. }
复制代码

作者: czwanglei    时间: 2014-7-16 23:42
当解决后,及时把帖子编辑为提问结束,这样版主才给你加分。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2