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

  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;比如图像的边缘。第二种性质的主要应用途径是依据实现指定的准则将图像分割为相似…

UTF8有BOM和无BOM

UTF-8 不需要 BOM&#xff0c;尽管 Unicode 标准允许在 UTF-8 中使用 BOM。所以不含 BOM 的 UTF-8 才是标准形式&#xff0c;在 UTF-8 文件中放置 BOM 主要是微软的习惯&#xff08;顺便提一下&#xff1a;把带有 BOM 的小端序 UTF-16 称作「Unicode」而又不详细说明&#xff0…

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

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

Receiver type ‘X’ for instance message is a forward declaration

引用的问题。 ARC要求完整的前向引用&#xff0c;也就是说在MRC时代可能只需要在.h中申明class就可以&#xff0c; 但是在ARC中如果调用某个子类中未覆盖的父类中的方法的话&#xff0c;必须对父类.h引用&#xff0c;否则无法编译。 在一个类中使用MRC 其中引用使用class 另一个…

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

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

站立会议07

昨天完成的任务 实现了不用电源键就能控制设备的亮、暗屏 今天的任务以及昨天的困难 由于控制亮、暗屏还有许多不足之处如&#xff1a;反应问题、以及一旦按下电源键锁屏就不能再控制设备使其变亮&#xff0c;只能在利用电源键唤醒&#xff0c;所以今天继续完善这一部分转载于:…

对网络体系变革的思考

来源&#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;这对于机器人和智能机器的发展来说是一大步…

Redis-实战案例

资料来源 极客时间 Redis 亚风 原文视频&#xff1a;https://u.geekbang.org/lesson/535?article681063 需求一 &#xff1a;帖子 同⼀个⽤户只能点赞⼀次&#xff0c;再次点击则取消点赞 如果当前⽤户已经点赞&#xff0c;则点赞按钮⾼亮实现 展示点赞数量并展示点赞top3&a…

vc中关于 directx的配置,和dxsdk_extras(directshow)

2009-11-10 0:28此文章&#xff1a;自己编写 转载于《汤姆&杰瑞》 DirectShow 1 —— 下载与VC配置 1 DirectX SDK9 Directshow sdk 下载网址 &#xff1a;http://download.microsoft.com/download/d/9/1/d91c44b9-fbac-4e8e-bee1-4a75777923ec/dxsdk_feb2005_extras.exe 在…

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;并在近日公布了结果。备选企业包括在智能网联、汽车后市场服务、汽车制造技术、出行…

Python中矩阵库Numpy基本操作

NumPy是一个关于矩阵运算的库&#xff0c;熟悉Matlab的都应该清楚&#xff0c;这个库就是让python能够进行矩阵话的操作&#xff0c;而不用去写循环操作。 下面对numpy中的操作进行总结。 numpy包含两种基本的数据类型&#xff1a;数组和矩阵。 数组(Arrays) >>> …

作业6--团队项目之需求

队员&#xff1a;欧泽波 201306114428 杨洁华 201306114429 赵泽嘉 201306114430 林扬滨 201306114424 学生&#xff08;杨洁华&#xff09;&#xff1a;软件的界面太单调了&#xff0c;不好看&#xff0c;要是有卡通人物就好了&#xff0c;有些题老师也没教&#xff0c;不知道…