c# 获取系统文件图标

简介: 最近写一个小程序,需要获得启动项的信息,在读取启动程序图标时遇到了这个问题 我们知道在c#里添加图标最常用的方法是使用ImageList,但要读取的程序图标是动态的,那么就需要动态的获得文件的图标 在网上找了找,发现有一个类,直接使用就可以了 贴出来和大家共享,本人在写一个类似于360safe的东西,不过软件增加了更多的个人色彩,希望大家能多多交流!showSystemIcon.
最近写一个小程序,需要获得启动项的信息,在读取启动程序图标时遇到了这个问题
我们知道在c#里添加图标最常用的方法是使用ImageList,但要读取的程序图标是动态的,那么就需要动态的获得文件的图标
在网上找了找,发现有一个类,直接使用就可以了
贴出来和大家共享,本人在写一个类似于360safe的东西,不过软件增加了更多的个人色彩,希望大家能多多交流!

showSystemIcon.cs
 1 using  System;
 2 using  System.Collections.Generic;
 3 using  System.ComponentModel;
 4 using  System.Data;
 5 using  System.Drawing;
 6 using  System.Text;
 7 using  System.Windows.Forms;
 8 using  System.Runtime.InteropServices;
 9
10 namespace  RepairTools_2._0
11 {
12    class showSystemIcon
13    {
14        public static uint SHGFI_ICON = 0x100;
15        public static uint SHGFI_DISPLAYNAME = 0x200;
16        public static uint SHGFI_TYPENAME = 0x400;
17        public static uint SHGFI_ATTRIBUTES = 0x800;
18        public static uint SHGFI_ICONLOCATION = 0x1000;
19        public static uint SHGFI_EXETYPE = 0x2000;
20        public static uint SHGFI_SYSICONINDEX = 0x4000;
21        public static uint SHGFI_LINKOVERLAY = 0x8000;
22        public static uint SHGFI_SELECTED = 0x10000;
23        public static uint SHGFI_LARGEICON = 0x0;
24        public static uint SHGFI_SMALLICON = 0x1;
25        public static uint SHGFI_OPENICON = 0x2;
26        public static uint SHGFI_SHELLICONSIZE = 0x4;
27        public static uint SHGFI_PIDL = 0x8;
28        public static uint SHGFI_USEFILEATTRIBUTES = 0x10;
29
30        public static uint FILE_ATTRIBUTE_NORMAL = 0x80;
31        public static uint LVM_FIRST = 0x1000;
32        public static uint LVM_SETIMAGELIST = LVM_FIRST + 3;
33        public static uint LVSIL_NORMAL = 0;
34        public static uint LVSIL_SMALL = 1;
35
36        [DllImport("Shell32.dll")]
37        public static extern IntPtr SHGetFileInfo(string pszPath,
38            uint dwFileAttributes, ref SHFILEINFO psfi,
39            int cbfileInfo, uint uFlags);
40
41        public struct SHFILEINFO
42        {
43            public IntPtr hIcon;
44            public int iIcon;
45            public int dwAttributes;
46            public string szDisplayName;
47            public string szTypeName;
48        }

49
50        [DllImport("User32.DLL")]
51        public static extern int SendMessage(IntPtr hWnd,
52            uint Msg, IntPtr wParam, IntPtr lParam);
53
54        public void ListViewSysImages(ListView AListView)
55        {
56            SHFILEINFO vFileInfo = new SHFILEINFO();
57            IntPtr vImageList = SHGetFileInfo(""0ref vFileInfo,
58                Marshal.SizeOf(vFileInfo), SHGFI_SHELLICONSIZE |
59                SHGFI_SYSICONINDEX | SHGFI_LARGEICON);
60
61            SendMessage(AListView.Handle, LVM_SETIMAGELIST, (IntPtr)LVSIL_NORMAL,
62                vImageList);
63
64            vImageList = SHGetFileInfo(""0ref vFileInfo,
65                Marshal.SizeOf(vFileInfo), SHGFI_SHELLICONSIZE |
66                SHGFI_SYSICONINDEX | SHGFI_SMALLICON);
67            SendMessage(AListView.Handle, LVM_SETIMAGELIST, (IntPtr)LVSIL_SMALL,
68                vImageList);
69        }

70
71        public int FileIconIndex(string AFileName)
72        {
73            SHFILEINFO vFileInfo = new SHFILEINFO();
74            SHGetFileInfo(AFileName, 0ref vFileInfo,
75                Marshal.SizeOf(vFileInfo), SHGFI_SYSICONINDEX);
76            return vFileInfo.iIcon;
77        }

78    }

79}

80

使用:
把它添加到ListView中
 1 private   void  btnRunSearch_Click( object  sender, EventArgs e)
 2          {
 3            try
 4            {
 5                ListViewItem lvi;
 6                ListViewItem.ListViewSubItem lvsi;
 7                showSystemIcon showIcon = new showSystemIcon();
 8
 9                this.lvStartupFileList.Items.Clear();
10                lvStartupFileList.BeginUpdate();
11                foreach (string str in RegistryOperate.strRunRegistry())
12                {
13                    string str1 = RegistryOperate.returnRun().GetValue(str).ToString();
14                    showIcon.ListViewSysImages(lvStartupFileList);
15                    lvi = new ListViewItem();
16                    lvi.Text = str;
17                    lvi.ImageIndex = showIcon.FileIconIndex(str1);
18                    lvsi = new ListViewItem.ListViewSubItem();
19                    lvsi.Text = str1;
20                    lvi.SubItems.Add(lvsi);
21                    lvStartupFileList.Items.Add(lvi);
22                }

23                lvStartupFileList.EndUpdate();
24            }

25            catch
26            {
27                MessageBox.Show(e.ToString());
28            }

29        }


有什么问题大家交流交流吧!


作者:Parry
出处:http://www.cnblogs.com/parry/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

相关文章
|
1月前
|
XML C# 数据格式
使用C#操作XML文件
使用C#操作XML文件
11 0
|
1月前
|
C#
C# 文件操作(全部) 追加、拷贝、删除、移动文件、创建目录
C# 文件操作(全部) 追加、拷贝、删除、移动文件、创建目录
21 0
|
3月前
|
C#
C#读取html文件
C#读取html文件
28 3
|
4天前
|
XML C# 数据格式
C# 解析XML文件
C# 解析XML文件
11 1
|
7天前
|
开发框架 前端开发 JavaScript
采用C#.Net +JavaScript 开发的云LIS系统源码 二级医院应用案例有演示
技术架构:Asp.NET CORE 3.1 MVC + SQLserver + Redis等 开发语言:C# 6.0、JavaScript 前端框架:JQuery、EasyUI、Bootstrap 后端框架:MVC、SQLSugar等 数 据 库:SQLserver 2012
|
25天前
|
安全 JavaScript 前端开发
C#医院手麻系统源码,手术麻醉管理系统源码
手术麻醉管理系统贯穿患者入院至出院全程,整合术前术后流程,如手术排班、麻醉计划、术中监护及术后恢复。采用C#.net6.0、Vue、Ant-Design等技术,与sqlserver2019数据库结合。系统提供麻醉记录、手术安全核查、费用管理等功能,确保信息数字化和流程规范化。通过自动化记录和数据分析,增强手术安全,优化资源分配,并支持医疗质控与研究。
C#医院手麻系统源码,手术麻醉管理系统源码
|
26天前
|
存储 监控 安全
C#手术麻醉系统源码 大型医院手麻系统4大需求是什么?
C#编写的大型医院手术麻醉系统旨在满足四大核心需求:智慧医院建设,要求实时患者信息共享与监控;医院等级评级,强调安全评估与术后管理;电子病历评级,规定手术预约、麻醉信息的标准化;科室需求,包括系统互联、流程信息化、数据追溯、操作简便、文书完整、快速响应、生命体征动态采集及质量控制。系统提升手麻工作的效率与安全性,确保手术顺利进行。
|
29天前
|
安全 数据处理 C#
C# Post数据或文件到指定的服务器进行接收
C# Post数据或文件到指定的服务器进行接收
|
29天前
|
C# 开发工具 数据安全/隐私保护
C#实现基于Word保护性模板文件的修改
C#实现基于Word保护性模板文件的修改
|
1月前
|
数据挖掘 C# 开发工具
采用C#语言开发的全套医院体检系统PEIS源码功能介绍
体检系统,是专为体检中心/医院体检科等体检机构,专门开发的全流程管理系统,通过软件实现检测仪器数据自动提取,内置多级医生工作台,细化工作将体检检查结果汇总,生成体检报告登记到计算机系统中。通过软件系统进行数据分析统计与评判以及建立体检相关的体检档案。从而实现体检流程的信息化,提高工作效率,减少手动结果录入的一些常犯错误。 在实际应用中,医院体检系统能够解决传统体检中手工操作带来的问题,如工作量大、效率低下、易漏检、重检或错检等。通过与医院信息系统(如HIS、LIS、PACS等)的连接,系统能够满足体检中心的日常工作流程,提供更好的管理、统计和查询分析功能。同时,基于网络基础的系统可以在网上传输
23 1