A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© StartHeiMa 中级黑马   /  2014-7-16 14:00  /  1056 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 StartHeiMa 于 2014-7-17 04:11 编辑

C#怎么获取文件默认图标,就是在资源管理器中看到的哪个图标。.EXE文件和其他数据文件使用的方法相同吗?

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

2 个回复

倒序浏览
已解决
添加引用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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1 怎么使自问自答呢?

查看全部评分

回复 使用道具 举报
当解决后,及时把帖子编辑为提问结束,这样版主才给你加分。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马