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

  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         }
View Code

 

转载于:https://www.cnblogs.com/zqhxl/p/4491757.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/492285.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2019全球AI人才分布图:美国占44%,中国人才净流入

来源&#xff1a;网络大数据人工智能技术正在快速发展&#xff0c;而各国对于AI人才的需求是没有止境的&#xff1a;大家都在培养和争夺人才上做文章。前不久&#xff0c;教育部批准了国内35所大学的人工智能本科专业;加拿大正希望通过“全球技能战略签证”吸引国外人才流入。今…

区域生长算法原理及MATLAB实现

1. 基于区域生长算法的图像分割原理 数字图像分割算法一般是基于灰度值的两个基本特性之一&#xff1a;不连续性和相似性。前一种性质的应用途径是基于图像灰度的不连续变化分割图像&#xff0c;比如图像的边缘。第二种性质的主要应用途径是依据实现指定的准则将图像分割为相似…

给初学者们讲解人工神经网络(ANN)

1. 介绍 这份教学包是针对那些对人工神经网络&#xff08;ANN&#xff09;没有接触过、基本上完全不懂的一批人做的一个简短入门级的介绍。我们首先简要的引入网络模型&#xff0c;然后才开始讲解ANN的相关术语。作为一个应用的案例&#xff0c;我们解释了后向传播算法&#x…

最后一场「屏之争」:汽车大佬与硅谷巨头的贴身肉搏

作者 | Tim Higgins 、William Boston来源&#xff1a;机器之能编译摘要&#xff1a;安卓的跨平台生态系统允许用户在手机和车机等不同屏幕上访问他们的数字生活&#xff0c;在去年&#xff0c;它帮助谷歌获得了 820 亿美元的移动广告收入。但在大众 CEO 赫伯特迪斯&#xff08…

对网络体系变革的思考

来源&#xff1a;&#xff1a;中兴摘要&#xff1a;互联网已走过了50年&#xff0c;其发展远远超越了初衷&#xff0c;各类新业务与应用加大了网络体系变革的压力&#xff0c;对网络体系颠覆性的探索和演进创新一直在进行。近年来关于5G网络体系的演进方向逐渐明朗&#xff0c;…

Junit 内部解密之一: Test + TestCase + TestSuite

转自:http://blog.sina.com.cn/s/blog_6cf812be0100wbhq.html nterface: Test 整个测试的的基础接口 Method 1: abstract int countTestCases() 这个方法主要是用来计算要运行的test case的数量的。 Method 2&#xff1a;abstract void run(TestResult result) 这个方法主要是…

数据预测之BP神经网络具体应用以及matlab实现

1.具体应用实例。根据表2&#xff0c;预测序号15的跳高成绩。 表2 国内男子跳高运动员各项素质指标 序号 跳高成绩() 30行进跑(s) 立定三级跳远() 助跑摸高() 助跑4—6步跳高() 负重深蹲杠铃() 杠铃半蹲系数 100 (s) 抓举 () 1 2.24 3.2 9.6 3.45 2.15 1…

谷歌机器人业务重组 花里胡哨没有用 要做实干家

来源&#xff1a; medium 编译 | 网易智能 (乐邦)在机器人领域&#xff0c;谷歌一直都不怎么顺利&#xff0c;尽管在前些年它大举进军&#xff0c;完成了多宗相关的并购交易。最近该公司重组成立Robotics at Google实验室&#xff0c;这对于机器人和智能机器的发展来说是一大步…

BP神经网络识别手写数字项目解析及matlab实现

BP神经网络指传统的人工神经网络&#xff0c;相比于卷积神经网络(CNN)来说要简单些。 人工神经网络具有复杂模式和进行联想、推理记忆的功能, 它是解决某些传统方法所无法解决的问题的有力工具。目前, 它日益受到重视, 同时其他学科的发展, 为其提供了更大的机会。1986 年, Rom…

智能家居市场年增速近30%!苹果看齐亚马逊、谷歌,欲开辟三足鼎立

来源&#xff1a;物联网智库整理摘要&#xff1a;作为世界领先的科技巨头&#xff0c;亚马逊、谷歌和苹果相爱相杀许多年。在智能家居领域&#xff0c;三家的“战争”也会随着市场的成熟而更加激烈。尽管苹果目前稍显落后&#xff0c;但未来市场广阔谁主沉浮仍未可知。近日&…

简单实现UITableView索引功能(中英文首字母索引)(一) ByH罗

UITableView索引功能是常见的,主要是获取中英文的首字母并排序&#xff0c;系统自带获取首字母 //系统获取首字母 - (NSString *) pinyinFirstLetter:(NSString*)sourceString {NSMutableString *source [sourceString mutableCopy];CFStringTransform((__bridge CFMutableStr…

matlab——图像细化

所谓细化&#xff0c;就是从原来的图像中去掉一些点&#xff0c;但仍要保持原来的形状。 1、代码如下&#xff1a; close all;clear all;clc; %关闭所有图形窗口&#xff0c;清除工作空间所有变量&#xff0c;清空命令行 I1imread(circles.png); subplot(1,3,1),imshow(I1);…

中国60家最强汽车初创在此!芯片厂高调入局,智能网联强势霸榜

来源&#xff1a;智东西摘要&#xff1a;中国汽车科技最全地图&#xff01;2018年&#xff0c;知名市场研究机构毕马威再次设立了中国汽车科技领先企业50强和新锐企业10强榜单评选&#xff0c;并在近日公布了结果。备选企业包括在智能网联、汽车后市场服务、汽车制造技术、出行…

专设AI周会 高管悉数到场 微软CEO有多重视人工智能?

来源&#xff1a;CNBC 翻译 | 网易智能 (天门山)据CNBC报道&#xff0c;一般在每周的周四&#xff0c;微软首席执行官萨蒂亚纳德拉(Satya Nadella)和微软高管团队都要在一起开会&#xff0c;讨论该公司越来越多的人工智能&#xff08;AI&#xff09;项目。微软首席技术官凯文斯…

汽车电子:下一个苹果产业链

来源&#xff1a;安信证券摘要&#xff1a;本文将从“7个层级深度解析”这次产业发展红利带来巨大且丰富的投资机遇。汽车电子产业&#xff0c;预计将是继家电、PC和手机之后又一次全产业链级别的大发展机遇&#xff0c;不同的是&#xff1a;1. 其构成产品附加值更高(高稳定/高…

模块化开发之sea.js实现原理总结

seajs官网说&#xff1a;seajs是一个模块加载器&#xff0c;所以学习它并不难。 在我的理解就是&#xff1a;本来我们是需要手动创建 script标签 引入 js文件的&#xff0c;但用seajs后&#xff0c;它就自动帮我们完成这些工作。 这里只说实现原理&#xff0c;具体使用请看seaj…

【干货】百度联合清华大学发布国内首个基于AI实践的《产业智能化白皮书》(附报告全文)...

来源&#xff1a;百度AI在4月9日举行的“百度大学 Alpha 学院首期学员毕业典礼”上&#xff0c;百度联合清华大学发布国内首个基于 AI 实践的行业重磅报告&#xff0c;《产业智能化白皮书——人工智能产业化发展地形初现端倪》。这是国内首次从产业演进的视角探讨 AI 与产业融合…

全球语种谱系图,看看机器翻译需要跨越的大山

来源&#xff1a;语言春秋编辑 | 北外新闻中心 杨丹蕊摘要&#xff1a;当前机器翻译技术可以分成两类&#xff0c;一种是 Rich Resource NMT&#xff0c;也就是双语语料丰富的语言对&#xff08;比如中文 - 英文&#xff09;&#xff1b;另一种叫 Low Resource NMT&#xff0c…

Big Data Security Part One: Introducing PacketPig

Series Introduction Packetloop CTO Michael Baker (cloudjunky) made a big splash when he presented ‘Finding Needles in Haystacks (the Size of Countries)‘ at Blackhat Europe earlier this year. The paper outlines a toolkit based onApache Pig, Packetpig pack…

美国科学家成功恢复老年人工作记忆,望奠定认知干预疗法基础

来源&#xff1a;科技日报伴随着人体衰老&#xff0c;大脑对信息加工和贮存的能力也必然会下降&#xff0c;但如果这种能力可以被逆转呢&#xff1f;据英国《Nature Neuroscience》杂志8日在线发表的一项研究&#xff0c;美国科学家通过同步脑区节律——按特定节律刺激颞叶和额…