使用前说明:
    PS:如果您想正常使用该类,需要在添加一个资源文件sx(如果是Win Form项目,该文件已存在),然后在资源文件中添加五个图标ICON元素,用于充当默认图标。命名为:Application、CDDriver、Empty、Folder、HardDriver。如下图所示:
←  资源文件
PPS:每个图标文件均包括48*48,32*32和16*16三种像素大小。如果您使用VS2008自带的图标库中的图标,则自动包含这三种像素大小(本例所使用的图标即是取自该库)。
PPPS:VS2008的默认路径为(如果您安装VS2008时选择安装该图标库的话):C:\Program Files\Microsoft Visual Studio 9.0\Common7\VS2008ImageLibrary\2052
位于该路径下的一个压缩文件包含几乎所有的系统图标元素。
PPPPS:如果你确定不需要使用默认图标,请将静态构造函数注释。但此时程序有可能返回空的图标对象null,
/* 该类是从最近编写的一个FTP软件中抽取出来的。
    * 该类基础原型来自网络,经过大量的修改和注释添加才得以完成,其中SHFileInfoFlags枚举值注释
    * 是从英文文档逐个翻译的,由于本人英语水平有限,难免有翻译不当之处,敬请谅解。
    * 类中各函数作用请参见注释。
    *
    * 使用时请您尊重他人的劳动成果,如果您需要分享该文档,请务必使用免费方式分享。
    *
    * 因为最近发现有人将我文库的文档分享到自己的文库、空间、CSDN上面,而且提供索要积分的方式下载
    * 关键是我在百度搜关键词,竟然搜不到我自己的,只搜到别人的,气愤ing  o(╯□╰)o
    */
    //于北京海淀区东升科技园内 3/9/2012 YJWang
using System;
using System.Runtime.InteropServices;
using System.Drawing;
using System.IO;
namespace FTPComponent
{
    /// <summary>
    /// 获取系统文件图标,Designed by YJWang 2/20/2012
    /// </summary>
    public class SystemIcon
    {
        #region 【内部类型定义】
        #region 【Enums】
        /// <summary>
        /// 文件信息标识枚举类,所有枚举定义值前省略SHGFI投标,比如Icon 完整名称应为SHGFI_ICON
        /// </summary>
        [Flags]
        private enum SHFileInfoFlags : uint
        {
            /// <summary>
            /// 允许有叠加图案的文件图标,该标识必须和Icon同时使用
            /// </summary>
            AddOveylays = 0x20,
            /// <summary>
            /// 只获取由参数FileAttribute指定的文件信息,并将其写入SHFileInfo结构的dwAttributes属性,如果不指定该标识,将同时获取所有文件信息。该标志不能和Icon标识同时使用
            /// </summary>
            Attr_Specified = 0x20000,
            /// <summary>
            /// 将获取的文件属性复制到SHFileInfo结构的dwAttributes属性中
            /// </summary>
            Attributes = 0x800,
            /// <summary>
            icon图标库/// 获取文件的显示名称(长文件名称),将其复制到SHFileInfo结构的dwAttributes属性中
            /// </summary>
            DisplayName = 0x200,
            /// <summary>
            /// 如果文件是可执行文件,将检索其信息,并将信息作为返回值返回
            /// </summary>
            ExeType = 0x2000,
            /// <summary>
            /// 获得图标和索引,将图标句柄返回到SHFileInfo结构的hIcon属性中,索引返回到iIcon属性中
            /// </summary>
            Icon = 0x100,
            /// <summary>
            /// 检索包含图标的文件,并将文件名,图标句柄,图标索引号,放回到SHFileInfo结构中
            /// </summary>
            IconLocation = 0x1000,
            /// <summary>
            /// 获得大图标,该标识必须和Icon标识同时使用
            /// </summary>
            LargeIcon = 0x0,
            /// <summary>
            /// 获取链接覆盖文件图标,该标识必须和Icon标识同时使用。
            /// </summary>
            LinkOverlay = 0x8000,
            /// <summary>
            /// 获取文件打开时的图标,该标识必须和Icon或SysIconIndex同时使用
            /// </summary>
            OpenIcon = 0x2,
            /// <summary>
            /// 获取链接覆盖文件图标索引,该标识必须和Icon标识同时使用。
            /// </summary>
            OverlayIndex = 0x40,
            /// <summary>
            /// 指示传入的路径是一个ITEMIDLIST结构的文件地址而不是一个路径名。
            /// </summary>
            Pidl = 0x8,
            /// <summary>
            /// 获取系统的高亮显示图标,该标识必须和Icon标识同时使用。
            /// </summary>
            Selected = 0x10000,
            /// <summary>
            /// 获取 Shell-sized icon ,该标志必须和Icon标识同时使用。
            /// </summary>
            ShellIconSize = 0x4,
            /// <summary>
            /// 获得小图标,该标识必须和Icon或SysIconIndex同时使用。
            /// </summary>
            SmallIcon = 0x1,
            /// <summary>
            /// 获取系统图像列表图标索引,返回系统图像列表句柄
            /// </summary>
            SysIconIndex = 0x4000,
            /// <summary>
            /// 获得文件类型,类型字符串被写入SHFileInfo结构的szTypeName属性中
            /// </summary>
            TypeName = 0x400,
            /// <summary>
            /// 指示如果由pszPath指定的路径不存在,SHGetFileInfo方法变不会试图去操作文件。指示返回与文件类型相关的信息。该标识不能和Attributes、ExeType和Pidl同时使用
            /// </summary>
            UseFileAttributes = 0x10
        }
        /// <summary>
        /// 文件属性枚举
        /// </summary>
        [Flags]
        private enum FileAttribute
        {
            ReadOnly = 0x00000001,
            Hidden = 0x00000002,
            System = 0x00000004,
            Directory = 0x00000010,    //路径信息
            Archive = 0x00000020,
            Device = 0x00000040,

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。