代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
CSharp
】
获得系统文件对应的图标
作者:
Dezai.CN
/ 发布于
2011/7/5
/
556
<div> <pre> #region DLLIMPORT // Retrieves information about an object in the file system, // such as a file, a folder, a directory, or a drive root. [DllImport("shell32", EntryPoint = "SHGetFileInfo", ExactSpelling = false, CharSet = CharSet.Auto, SetLastError = true)] private static extern IntPtr SHGetFileInfo( string pszPath, //指定的文件名 FILE_ATTRIBUTE dwFileAttributes, //文件属性 ref SHFILEINFO sfi, //返回获得的文件信息,是一个记录类型 int cbFileInfo, //文件的类型名 SHGFI uFlags); #endregion #region STRUCTS // Contains information about a file object [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] private struct SHFILEINFO { public IntPtr hIcon; //文件的图标句柄 public IntPtr iIcon; //图标的系统索引号 public uint dwAttributes; //文件的属性值 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] public string szDisplayName; //文件的显示名 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)] public string szTypeName; //文件的类型名 }; #endregion #region Enums // Flags that specify the file information to retrieve with SHGetFileInfo [Flags] public enum SHGFI : uint { ADDOVERLAYS = 0x20, ATTR_SPECIFIED = 0x20000, ATTRIBUTES = 0x800, //获得属性 DISPLAYNAME = 0x200, //获得显示名 EXETYPE = 0x2000, ICON = 0x100, //获得图标 ICONLOCATION = 0x1000, LARGEICON = 0, //获得大图标 LINKOVERLAY = 0x8000, OPENICON = 2, OVERLAYINDEX = 0x40, PIDL = 8, SELECTED = 0x10000, SHELLICONSIZE = 4, SMALLICON = 1, //获得小图标 SYSICONINDEX = 0x4000, TYPENAME = 0x400, //获得类型名 USEFILEATTRIBUTES = 0x10 } // Flags that specify the file information to retrieve with SHGetFileInfo [Flags] public enum FILE_ATTRIBUTE { READONLY = 0x00000001, HIDDEN = 0x00000002, SYSTEM = 0x00000004, DIRECTORY = 0x00000010, ARCHIVE = 0x00000020, DEVICE = 0x00000040, NORMAL = 0x00000080, TEMPORARY = 0x00000100, SPARSE_FILE = 0x00000200, REPARSE_POINT = 0x00000400, COMPRESSED = 0x00000800, OFFLINE = 0x00001000, NOT_CONTENT_INDEXED = 0x00002000, ENCRYPTED = 0x00004000 } #endregion #region Variables //保存小图标列表 private static System.Windows.Forms.ImageList smallImageList; private static List<string> FileExtList = new List<string>(); static SystemFileIcon() { smallImageList = new System.Windows.Forms.ImageList(); //将 ImageList中的图标设置为32位色图标,这样可以得到较好的显示效果 smallImageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit; addForderIcon(); } #endregion #region PrivateMethods /// <summary> /// 获取系统图标 /// </summary> /// <param name="path">文件名</param> /// <param name="dwAttr">文件信息</param> /// <param name="dwFlag">获取信息控制字</param> /// <returns></returns> private static Icon GetIcon(string path, FILE_ATTRIBUTE dwAttr, SHGFI dwFlag) { SHFILEINFO fi = new SHFILEINFO(); Icon ic = null; int iTotal = (int)SHGetFileInfo(path, dwAttr, ref fi, 0, dwFlag); ic = Icon.FromHandle(fi.hIcon); return ic; } /// <summary> /// 向smallInamgeList和largeImageList中 /// 加入相应文件对应的图标 /// </summary> /// <param name="fileName"></param> private static void addFileIcon(string fileName) { smallImageList.Images.Add(GetIcon(fileName, FILE_ATTRIBUTE.NORMAL, SHGFI.USEFILEATTRIBUTES | SHGFI.ICON | SHGFI.LARGEICON)); } private static void addForderIcon() { smallImageList.Images.Add(GetIcon("dic", FILE_ATTRIBUTE.DIRECTORY, SHGFI.USEFILEATTRIBUTES | SHGFI.ICON | SHGFI.LARGEICON)); } #endregion #region PublicMethods /// <summary> /// 获取系统的小图标列表 /// </summary> public static System.Windows.Forms.ImageList SmallImageList { get { return smallImageList; } } /// <summary> /// 文件对应的图标在ImageList中的索引号 /// (在SmallImageList,LargeImageList中的索引号是相同的) /// </summary> /// <param name="fileName">扩展名 如 .docx</param> /// <returns>索引号</returns> public static int ImageIndex(string fileName) { int index = 0; int extIndex = fileName.LastIndexOf('.'); if (extIndex < 0)//没有扩展名的文件当作文件夹处理 { extIndex = 2; } else//文件图标索引获取 { addFileIcon(fileName);//装载图标到ImageList中 index = smallImageList.Images.Count - 1; } return index; } #endregion } </pre> </div>
试试其它关键字
图标
同语言下
.
文件IO 操作类库
.
Check图片类型[JPEG(.jpg 、.jpeg),TIF,GIF,BMP,PNG,P
.
机器名和IP取得(IPV4 IPV6)
.
Tiff转换Bitmap
.
linqHelper
.
MadieHelper.cs
.
RegHelper.cs
.
如果关闭一个窗体后激活另一个窗体的事件或方法
.
创建日志通用类
.
串口辅助开发类
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
Dezai.CN
贡献的其它代码
(
4037
)
.
多线程Socket服务器模块
.
生成随机密码
.
清除浮动样式
.
弹出窗口居中
.
抓取url的函数
.
使用base HTTP验证
.
div模拟iframe嵌入效果
.
通过header转向的方法
.
Session操作类
.
执行sqlite输入插入操作后获得自动编号的ID
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3