c# 获取系统文件图标

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

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

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

70c# 获取系统文件图标
71c# 获取系统文件图标        public int FileIconIndex(string AFileName)
72c# 获取系统文件图标c# 获取系统文件图标        c# 获取系统文件图标{
73c# 获取系统文件图标            SHFILEINFO vFileInfo = new SHFILEINFO();
74c# 获取系统文件图标            SHGetFileInfo(AFileName, 0ref vFileInfo,
75c# 获取系统文件图标                Marshal.SizeOf(vFileInfo), SHGFI_SYSICONINDEX);
76c# 获取系统文件图标            return vFileInfo.iIcon;
77c# 获取系统文件图标        }

78c# 获取系统文件图标    }

79c# 获取系统文件图标}

80c# 获取系统文件图标

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

23c# 获取系统文件图标                lvStartupFileList.EndUpdate();
24c# 获取系统文件图标            }

25c# 获取系统文件图标            catch
26c# 获取系统文件图标c# 获取系统文件图标            c# 获取系统文件图标{
27c# 获取系统文件图标                MessageBox.Show(e.ToString());
28c# 获取系统文件图标            }

29c# 获取系统文件图标        }


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


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

上一篇:EXEC与sp_executesql的区别及应用


下一篇:MVC3缓存之三:MVC3中的局部缓存(Partial Page)