C# 通过文件扩展名获取图标和描述
C# 通过文件扩展名获取图标和描述
AttachTool 类源码: C# Code: /// <summary> /// 通过扩展名得到图标和描述 /// </summary> /// <param name="ext">扩展名</param> /// <param name="LargeIcon">得到大图标</param> /// <param name="smallIcon">得到小图标</param> public static void GetExtsIconAndDescription(string ext, out Icon largeIcon, out Icon smallIcon, out string description) { largeIcon = smallIcon = null; description = ""; var extsubkey = Registry.ClassesRoot.OpenSubKey(ext); //从注册表中读取扩展名相应的子键 if (extsubkey != null) { var extdefaultvalue = (string)extsubkey.GetValue(null); //取出扩展名对应的文件类型名称 //未取到值,返回预设图标 if (extdefaultvalue == null) { GetDefaultIcon(out largeIcon, out smallIcon); return; } var typesubkey = Registry.ClassesRoot.OpenSubKey(extdefaultvalue); //从注册表中读取文件类型名称的相应子键 if (typesubkey != null) { description = (string)typesubkey.GetValue(null); //得到类型描述字符串 var defaulticonsubkey = typesubkey.OpenSubKey("DefaultIcon"); //取默认图标子键 if (defaulticonsubkey != null) { //得到图标来源字符串 var defaulticon = (string)defaulticonsubkey.GetValue(null); //取出默认图标来源字符串 var iconstringArray = defaulticon.Split(','); int nIconIndex = 0; if (iconstringArray.Length > 1) int.TryParse(iconstringArray[1], out nIconIndex); //得到图标 System.IntPtr phiconLarge = new IntPtr(); System.IntPtr phiconSmall = new IntPtr(); ExtractIconExW(iconstringArray[0].Trim('"'), nIconIndex, ref phiconLarge, ref phiconSmall, 1); if (phiconLarge.ToInt32() > 0) largeIcon = Icon.FromHandle(phiconLarge); if (phiconSmall.ToInt32() > 0) smallIcon = Icon.FromHandle(phiconSmall); } } } } C# Code: /// <summary> /// 获取缺省图标 /// </summary> /// <param name="largeIcon"></param> /// <param name="smallIcon"></param> public static void GetDefaultIcon(out Icon largeIcon, out Icon smallIcon) { largeIcon = smallIcon = null; System.IntPtr phiconLarge = new IntPtr(); System.IntPtr phiconSmall = new IntPtr(); ExtractIconExW(Path.Combine(Environment.SystemDirectory, "shell32.dll"), 0, ref phiconLarge, ref phiconSmall, 1); if (phiconLarge.ToInt32() > 0) largeIcon = Icon.FromHandle(phiconLarge); if (phiconSmall.ToInt32() > 0) smallIcon = Icon.FromHandle(phiconSmall); } //来源:C/S框架网(www.csframework.com) QQ:1980854898 C# Code: /// Return Type: UINT->unsigned int ///lpszFile: LPCWSTR->WCHAR* ///nIconIndex: int ///phiconLarge: HICON* ///phiconSmall: HICON* ///nIcons: UINT->unsigned int [DllImportAttribute("shell32.dll", EntryPoint = "ExtractIconExW", CallingConvention = System.Runtime.InteropServices.CallingConvention.StdCall)] public static extern uint ExtractIconExW([System.Runtime.InteropServices.InAttribute()] [System.Runtime.InteropServices.MarshalAsAttribute(UnmanagedType.LPWStr)] string lpszFile, int nIconIndex, ref IntPtr phiconLarge, ref IntPtr phiconSmall, uint nIcons); public static void CreateFileIcon(string fileType, out Icon large, out Icon small) { string des; if (fileType.Trim() == "") //预设图标 { AttachTool.GetDefaultIcon(out large, out small); } else if (fileType.ToUpper() == ".EXE") //应用程序图标单独获取 { IntPtr l = IntPtr.Zero; IntPtr s = IntPtr.Zero; AttachTool.ExtractIconExW(Path.Combine(Environment.SystemDirectory, "shell32.dll"), 2, ref l, ref s, 1); large = Icon.FromHandle(l); small = Icon.FromHandle(s); } else //其它类型的图标 { AttachTool.GetExtsIconAndDescription(fileType, out large, out small, out des); } if ((large == null) || (small == null)) //无法获取图标,预设图标 AttachTool.GetDefaultIcon(out large, out small); } //来源:C/S框架网(www.csframework.com) QQ:1980854898 C# Code: public static byte[] ImageToByte(Image image) { MemoryStream ms = new MemoryStream(); image.Save(ms, ImageFormat.Bmp); byte[] bs = ms.ToArray(); ms.Close(); return bs; } public static Image ByteToImage(byte[] bs) { MemoryStream ms = new MemoryStream(bs); Bitmap bmp = new Bitmap(ms); ms.Close(); return bmp; } //来源:C/S框架网(www.csframework.com) QQ:1980854898 C# Code: [StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)] public struct HICON__ { public int unused; }
参考文档:
[原创]C#一键隐藏QQ/MSN,显示/隐藏系统托盘图标,获取托盘图标 C#获取系统嵌入式资源,如Xml,Txt文件 C# 从注册表获取Windows服务的文件路径 C# 几个常用获取当前文件名的方法 C#获取当前程序集Assembly的文件名 C#获取应用程序当前文件目录位置(安装路径) C#使用StreamWriter在大文本文件末尾添加一行内容 VS解决方案快速改名工具(CSFramework.Rename)-获取文件列表BUG C#获取文件的编码格式(UTF-8/UNICODE/ASCII) C#.NET iTextSharp生成PDF文件源码大全(生成表格、透明水印,页脚页眉页码等) ASP.NET通过HttpContext获取IP地址 C#获取文本文件的编码格式Encoding,自动区分GB2312和UTF8 C#读取Excel文件提示:未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0” C# Image图片转Icon图标 C# NavBarControl根据鼠标点击位置获取 NavBarGroup 对象
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 | |