根据文件名或文件扩展名获取文件的默认图标

  有时候我们需要根据不同的文件扩展名显示不同的图标,比如用C#做一个资源管理器。在C#中可以使用 Icon icon = System.Drawing.Icon.ExtractAssociatedIcon(fileFullName) 来得到指定文件图标。但是Icon.ExtractAssociatedIcon 只能获取大图标,要获取小图标还是要使用 API。

  
  
using System; using System.Runtime.InteropServices; using System.Drawing; namespace MyNamespace { public class FileIcon { /// <summary> /// 获取文件的默认图标 /// </summary> /// <param name="fileName"> 文件名。 /// 可以只是文件名,甚至只是文件的扩展名(.*); /// 如果想获得.ICO文件所表示的图标,则必须是文件的完整路径。 /// </param> /// <param name="largeIcon"> 是否大图标 </param> /// <returns> 文件的默认图标 </returns> public static Icon GetFileIcon( string fileName, bool largeIcon) { SHFILEINFO info = new SHFILEINFO( true ); int cbFileInfo = Marshal.SizeOf(info); SHGFI flags; if (largeIcon) flags = SHGFI.Icon | SHGFI.LargeIcon | SHGFI.UseFileAttributes; else flags = SHGFI.Icon | SHGFI.SmallIcon | SHGFI.UseFileAttributes; SHGetFileInfo(fileName, 256 , out info, ( uint )cbFileInfo, flags); return Icon.FromHandle(info.hIcon); } [DllImport( " Shell32.dll " )] private static extern int SHGetFileInfo ( string pszPath, uint dwFileAttributes, out SHFILEINFO psfi, uint cbfileInfo, SHGFI uFlags ); [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 { SmallIcon = 0x00000001 , LargeIcon = 0x00000000 , Icon = 0x00000100 , DisplayName = 0x00000200 , Typename = 0x00000400 , SysIconIndex = 0x00004000 , UseFileAttributes = 0x00000010 } } }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值