根据文件扩展名获取系统图标

  1        /// <summary>
  2        /// 根据文件后缀名获取系统图标。
  3        /// </summary>
  4        /// <param name="extension"></param>
  5        /// <returns></returns>
  6         public static ImageSource GetIconByExtension(string extension)
  7         {
  8             Icon smallIcon = null;
  9             Icon bigIcon = null;
 10             string describle = "";
 11             GetExtsIconAndDescription(extension, out bigIcon, out smallIcon, out describle);
 12             if (bigIcon != null)
 13             {
 14                 Bitmap bitmap = bigIcon.ToBitmap();
 15                 IntPtr hBitmap = bitmap.GetHbitmap();
 16                 ImageSource imageSource =
 17                      System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
 18                           hBitmap, IntPtr.Zero, Int32Rect.Empty,
 19                           BitmapSizeOptions.FromEmptyOptions());
 20                 return imageSource;
 21             }
 22   /// <summary>
 23         /// 通过扩展名得到图标和描述
 24         /// </summary>
 25         /// <param name="ext">扩展名</param>
 26         /// <param name="LargeIcon">得到大图标</param>
 27         /// <param name="smallIcon">得到小图标</param>
 28         public static void GetExtsIconAndDescription(string ext, out Icon largeIcon, out Icon smallIcon, out string description)
 29         {
 30             largeIcon = smallIcon = null;
 31             description = "";
 32             var extsubkey = Registry.ClassesRoot.OpenSubKey(ext); //从注册表中读取扩展名相应的子键
 33             if (extsubkey != null)
 34             {
 35                 var extdefaultvalue = (string)extsubkey.GetValue(null); //取出扩展名对应的文件类型名称
 36
 37                 //未取到值,返回预设图标
 38                 if (extdefaultvalue == null)
 39                 {
 40                     GetDefaultIcon(out largeIcon, out smallIcon);
 41                     return;
 42                 }
 43
 44                 var typesubkey = Registry.ClassesRoot.OpenSubKey(extdefaultvalue); //从注册表中读取文件类型名称的相应子键
 45                 if (typesubkey != null)
 46                 {
 47                     description = (string)typesubkey.GetValue(null); //得到类型描述字符串
 48                     var defaulticonsubkey = typesubkey.OpenSubKey("DefaultIcon"); //取默认图标子键
 49                     if (defaulticonsubkey != null)
 50                     {
 51                         //得到图标来源字符串
 52                         var defaulticon = (string)defaulticonsubkey.GetValue(null); //取出默认图标来源字符串
 53                         var iconstringArray = defaulticon.Split(‘,‘);
 54                         int nIconIndex = 0;
 55                         if (iconstringArray.Length > 1) int.TryParse(iconstringArray[1], out nIconIndex);
 56                         //得到图标
 57                         System.IntPtr phiconLarge = new IntPtr();
 58                         System.IntPtr phiconSmall = new IntPtr();
 59                         ExtractIconExW(iconstringArray[0].Trim(‘"‘), nIconIndex, ref phiconLarge, ref phiconSmall, 1);
 60                         if (phiconLarge.ToInt32() > 0) largeIcon = Icon.FromHandle(phiconLarge);
 61                         if (phiconSmall.ToInt32() > 0) smallIcon = Icon.FromHandle(phiconSmall);
 62                     }
 63                 }
 64             }
 65         }
 66         /// <summary>
 67         /// 获取缺省图标
 68         /// </summary>
 69         /// <param name="largeIcon"></param>
 70         /// <param name="smallIcon"></param>
 71         public static void GetDefaultIcon(out Icon largeIcon, out Icon smallIcon)
 72         {
 73             largeIcon = smallIcon = null;
 74             System.IntPtr phiconLarge = new IntPtr();
 75             System.IntPtr phiconSmall = new IntPtr();
 76             ExtractIconExW(Path.Combine(Environment.SystemDirectory, "shell32.dll"), 0, ref phiconLarge, ref phiconSmall, 1);
 77             if (phiconLarge.ToInt32() > 0) largeIcon = Icon.FromHandle(phiconLarge);
 78             if (phiconSmall.ToInt32() > 0) smallIcon = Icon.FromHandle(phiconSmall);
 79         }
 80         /// Return Type: UINT->unsigned int
 81         ///lpszFile: LPCWSTR->WCHAR*
 82         ///nIconIndex: int
 83         ///phiconLarge: HICON*
 84         ///phiconSmall: HICON*
 85         ///nIcons: UINT->unsigned int
 86         [DllImportAttribute("shell32.dll", EntryPoint = "ExtractIconExW", CallingConvention = System.Runtime.InteropServices.CallingConvention.StdCall)]
 87         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);
 88
 89         public static void CreateFileIcon(string fileType, out Icon large, out Icon small)
 90         {
 91             string des;
 92
 93             if (fileType.Trim() == "") //预设图标
 94             {
 95                 GetDefaultIcon(out large, out small);
 96             }
 97             else if (fileType.ToUpper() == ".EXE") //应用程序图标单独获取
 98             {
 99                 IntPtr l = IntPtr.Zero;
100                 IntPtr s = IntPtr.Zero;
101
102                 ExtractIconExW(Path.Combine(Environment.SystemDirectory, "shell32.dll"), 2, ref l, ref s, 1);
103
104                 large = Icon.FromHandle(l);
105                 small = Icon.FromHandle(s);
106             }
107             else //其它类型的图标
108             {
109                 GetExtsIconAndDescription(fileType, out large, out small, out des);
110             }
111
112             if ((large == null) || (small == null)) //无法获取图标,预设图标
113                 GetDefaultIcon(out large, out small);
114         }
115         public static byte[] ImageToByte(Image image)
116         {
117             MemoryStream ms = new MemoryStream();
118             image.Save(ms, ImageFormat.Bmp);
119             byte[] bs = ms.ToArray();
120             ms.Close();
121             return bs;
122         }
123
124         public static Image ByteToImage(byte[] bs)
125         {
126             MemoryStream ms = new MemoryStream(bs);
127             Bitmap bmp = new Bitmap(ms);
128             ms.Close();
129             return bmp;
130         }
131         [StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential)]
132         public struct HICON__
133         {
134             public int unused;
135         }
136             return null;
137         }

时间: 2024-10-24 16:48:46

根据文件扩展名获取系统图标的相关文章

PHP中获取文件扩展名的N种方法

PHP中获取文件扩展名的N种方法 从网上收罗的,基本上就以下这几种方式: 第1种方法: function get_extension($file) { substr(strrchr($file, '.'), 1); } 第2种方法: function get_extension($file) { return substr($file, strrpos($file, '.')+1); } 第3种方法: function get_extension($file) { return end(expl

PHP获取文件扩展名五种以上的方法和注释

在PHP面试中或者考试中会有很大几率碰到写出五种获取文件扩展名的方法,下面是我自己总结的一些方法还有一些注释: 一.方法 $file = ‘需要进行获取扩展名的文件.php’; 1. function getExt1($file) { return substr(strrchr($file,’.'),1); }2. function getExt2($file) { return substr($file,strrpos($file,’.')+1); }3. function getExt3($

获取文件扩展名

函数名称: strrchr 函数原型:char *strrchr(const char *str, char c); 所属库: string.h 函数功能:查找一个字符c在另一个字符串str中末次出现的位置(也就是从str的右侧开始查找字符c首次出现的位置),并返回从字符串中的这个位置起,一直到字符串结束的所有字符.如果未能找到指定字符,那么函数将返回NULL. 相关函数功能: 获取文件扩展名 宽字符获取文件扩展名:wcsrchr

PHP中 获取文件扩展名的N种方法

PHP中获取文件扩展名的N种方法,有以下这几种方式:第1种方法:function get_extension($file){substr(strrchr($file, ‘.’), 1);} 第2种方法:function get_extension($file){return substr($file, strrpos($file, ‘.’)+1);} 第3种方法:function get_extension($file){return end(explode(‘.’, $file));} 第4种

python获取文件扩展名的方法(转)

主要介绍了python获取文件扩展名的方法,涉及Python针对文件路径的相关操作技巧.具体实现方法如下: 1 2 3 4 import os.path def file_extension(path):   return os.path.splitext(path)[1] print file_extension('C:\py\wxPython.gif') 输出结果为:.gif 原文地址:https://www.cnblogs.com/hixiaowei/p/8438930.html

python获取文件扩展名的方法

主要介绍了python获取文件扩展名的方法,涉及Python针对文件路径的相关操作技巧 import os.path def file_extension(path): return os.path.splitext(path)[1] print file_extension('C:\py\wxPython.gif') 输出结果为:.gif 原文地址:https://www.cnblogs.com/sea-stream/p/10231908.html

常用文件扩展名

http://baike.baidu.com/view/579392.htm ISO:镜像文件 RAR:压缩包 html:网页 zip:压缩包 exe:安装包 pdf:pdf文档 rm:视频文件 avi:视频文件 tmp:临时文件 xls:excel工作表 mdf:虚拟光驱镜像文件 txt:记事本 doc:word文档 MID:声卡声乐文件 文件类型 扩展名及打开方式 文档文件 txt(所有文字处理软件或编辑器都可打开).doc(word及wps等软件可打开).hlp(adobe acrobat

delphi相关文件扩展名

整理了一下用Delphi作的程序的源代码中常见的文件扩展名,并给出了这些文件扩展名的意义,以便源代码管理时作为参照,扩展名以字母为序(不需要进源代码库不表示不需要进库). ================================================================================~* Delphi生成的备份文件,在版本控制库及发布代码中不应该出现这些文件,如果修改了某个文件却因某些原因没有保存的话,可以尝试使用这些文件恢复. =========

关于java文件扩展名认识

☆ 写在前面 一名新手在历经千辛万苦写好Java程序,怀揣激动的心情去编译和执行java程序时,结果出现错误,什么找不到文件,什么不存在,找不到main方法等等.我在这里就文件后扩展名,也叫文件后缀名的问题来探讨一下. ☆ 认识和比对 看看下面两张图片中的文件有什么区别. A组 B组 大概瞟一眼,图标不怎么一致,仔细看看,同样的扩展名格式,B组的看起来正常,而A组貌似有一种中毒或损坏的感觉. 其实A组在隐藏扩展名的情况下,创建的文件.这也就是一般电脑装完系统,默认的情况.B组是对电脑进行了设置之