`
cpine
  • 浏览: 54520 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

C#中读取“已注册的文件类型”的图标及读取指定文件图标的方法

阅读更多
using System;
using System.IO;
using System.Drawing;
using Microsoft.Win32;
using System.Runtime.InteropServices;


namespace GetIconDemo
{
    /// <summary>
    /// 提供从操作系统读取图标的方法
    /// </summary>
    public class GetSystemIcon
    {
        /// <summary>
        /// 依据文件名读取图标,若指定文件不存在,则返回空值。
        /// </summary>
        /// <param name="fileName"></param>
        /// <returns></returns>
        public static Icon GetIconByFileName(string fileName)
        {
            if (fileName == null || fileName.Equals(string.Empty)) return null;
            if (!File.Exists(fileName)) return null;

            SHFILEINFO shinfo = new SHFILEINFO();
            //Use this to get the small Icon
            Win32.SHGetFileInfo(fileName, 0, ref shinfo, (uint)Marshal.SizeOf(shinfo), Win32.SHGFI_ICON | Win32.SHGFI_SMALLICON);
            //The icon is returned in the hIcon member of the shinfo struct
            System.Drawing.Icon myIcon = System.Drawing.Icon.FromHandle(shinfo.hIcon);
            return myIcon;
        }

        /// <summary>
        /// 给出文件扩展名(.*),返回相应图标
        /// 若不以"."开头则返回文件夹的图标。
        /// </summary>
        /// <param name="fileType"></param>
        /// <param name="isLarge"></param>
        /// <returns></returns>
        public static Icon GetIconByFileType(string fileType, bool isLarge)
        {
            if (fileType == null || fileType.Equals(string.Empty)) return null;

            RegistryKey regVersion = null;
            string regFileType = null;
            string regIconString = null;
            string systemDirectory = Environment.SystemDirectory + "\\";

            if (fileType[0] == '.')
            {
                //读系统注册表中文件类型信息
                regVersion = Registry.ClassesRoot.OpenSubKey(fileType, true);
                if (regVersion != null)
                {
                    regFileType = regVersion.GetValue("") as string;
                    regVersion.Close();
                    regVersion = Registry.ClassesRoot.OpenSubKey(regFileType + @"\DefaultIcon", true);
                    if (regVersion != null)
                    {
                        regIconString = regVersion.GetValue("") as string;
                        regVersion.Close();
                    }
                }
                if (regIconString == null)
                {
                    //没有读取到文件类型注册信息,指定为未知文件类型的图标
                    regIconString = systemDirectory + "shell32.dll,0";
                }
            }
            else
            {
                //直接指定为文件夹图标
                regIconString = systemDirectory + "shell32.dll,3";
            }
            string[] fileIcon = regIconString.Split(new char[] { ',' });
            if (fileIcon.Length != 2)
            {
                //系统注册表中注册的标图不能直接提取,则返回可执行文件的通用图标
                fileIcon = new string[] { systemDirectory + "shell32.dll", "2" };
            }
            Icon resultIcon = null;
            try
            {
                //调用API方法读取图标
                int[] phiconLarge = new int[1];
                int[] phiconSmall = new int[1];
                uint count = Win32.ExtractIconEx(fileIcon[0], Int32.Parse(fileIcon[1]), phiconLarge, phiconSmall, 1);
                IntPtr IconHnd = new IntPtr(isLarge ? phiconLarge[0] : phiconSmall[0]);
                resultIcon = Icon.FromHandle(IconHnd);
            }
            catch { }
            return resultIcon;
        }
    }



    [StructLayout(LayoutKind.Sequential)]
    public 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;
    };

    /// <summary>
    /// 定义调用的API方法
    /// </summary>
    class Win32
    {
        public const uint SHGFI_ICON = 0x100;
        public const uint SHGFI_LARGEICON = 0x0; // 'Large icon
        public const uint SHGFI_SMALLICON = 0x1; // 'Small icon

        [DllImport("shell32.dll")]
        public static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, uint cbSizeFileInfo, uint uFlags);
        [DllImport("shell32.dll")]
        public static extern uint ExtractIconEx(string lpszFile, int nIconIndex, int[] phiconLarge, int[] phiconSmall, uint nIcons);

    }
}


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/snlei/archive/2009/03/08/3970345.aspx

 

分享到:
评论

相关推荐

    C#读取文件图标代码

    在C#编程中,读取文件图标是一项常见的任务,尤其当你需要开发文件管理器或资源浏览器这类应用时。文件图标通常与操作系统中的文件关联,表示文件类型或应用程序的视觉标识。下面将详细介绍如何使用C#来获取文件图标...

    winform C# 根据文件扩展名(文件类型)提取图标icon,并保存成透明背景的png图片的源代码

    在本文中,我们将深入探讨如何使用C#从文件扩展名中获取与之关联的图标(Icon),并将这些图标保存为具有透明背景的PNG图片。这个过程涉及到系统资源的访问、图像处理以及文件操作等多个知识点。 首先,我们需要...

    C#写的获取当前文件ICO图标的程序

    在这个示例中,我们首先导入了必要的命名空间,然后在`Main`方法中调用了`IcoHelper.GetIconForFilePath`来获取指定文件的图标。如果成功,我们可以选择保存图标为ICO文件,或者在用户界面上显示它。 获取ICO图标的...

    C#获取文件图标

    在C#编程中,获取文件图标是一项常见的任务,特别是在开发Windows桌面应用程序时,例如WinForms。文件图标通常关联着特定类型的文件,如.txt文件、.docx文件或.exe可执行文件。这些图标由操作系统根据文件扩展名从...

    C#读取ipa文件方法

    总结来说,通过C#读取IPA文件并解析Info.plist,我们可以获取到iOS应用的多种信息,包括但不限于应用名称、版本号。这个过程涉及文件的压缩与解压缩、XML解析以及文件操作等技术,对提升C#编程技能和理解iOS应用结构...

    C# 提取并显示文件包含的图标

    在C#编程中,提取并显示文件包含的图标是一项常见的任务,特别是在开发桌面应用程序时,可能需要读取可执行文件、DLL或者ICO文件中的图标。本文将深入探讨如何使用C#来实现这一功能。 首先,我们需要理解文件图标是...

    C# 获取文件夹以及文件图标

    在C#编程中,获取文件夹和文件的图标是一项常见的任务,这通常涉及到Windows壳对象(Shell Objects)和系统图标库的使用。本教程将详细解释如何实现这一功能,并展示如何将这些信息显示在一个ListView控件中。 首先...

    C# 获取应用程序超大高清高分辨率图标

    - 使用`Icon.ExtractAssociatedIcon`方法,可以直接从exe或dll文件中提取默认图标,但这个方法可能无法获取到所有分辨率的图标。 - 使用P/Invoke技术调用Windows API的`ExtractIconEx`函数,这个函数允许我们指定...

    C# XML文件读取示例

    本示例着重介绍如何在C# WinForms应用程序中读取XML文件。 1. **XML文件读取基础** XML文件由元素、属性、文本、注释和处理指令等组成。在C#中,我们主要使用`System.Xml`命名空间中的类来操作XML,如`XmlDocument...

    读取文件图标的代码资源

    在C#中,可以使用`System.Drawing.Icon.ExtractAssociatedIcon`方法来读取文件图标。这个方法接受文件路径作为参数,并返回一个`Icon`对象。例如: ```csharp Icon fileIcon = Icon.ExtractAssociatedIcon...

    C# 提取目录中最新的更新文件

    在C#编程中,提取目录中最新的更新文件是一项常见的任务,尤其在软件更新或日志管理等场景下。本文将详细讲解如何利用C#来实现这个功能,以及涉及的相关知识点。 首先,我们要理解C#中的文件系统操作。C#提供了...

    C#提取文件中的图标,C#提取文件中的图标

    在C#编程中,提取文件中的图标是一项常见的任务,尤其对于处理可执行文件(.exe或.dll)或者图库文件(如.ico)。图标是应用程序的视觉标识,它们通常存储在可执行文件或动态链接库中。本文将详细介绍如何使用C#来...

    C#2.0 图标浏览器

    【C# 2.0 图标浏览器】是一个基于C#编程语言开发的应用程序,它能够读取并显示ICO、EXE和DLL文件中的图标。这个示例程序旨在模仿Windows XP系统中为文件夹更改图标的功能,允许用户查看和选择不同文件类型的图标。...

    C#图标提取工具

    2. **读取图标**:应用使用C#代码读取选中文件的资源信息,查找并提取图标数据。 3. **解码图标**:由于图标可能包含多种分辨率和色彩模式,工具需要解析这些信息并创建对应的Bitmap对象。 4. **显示预览**:提取的...

    c# 读取数据到下拉列表框

    ### C# 读取数据到下拉列表框 在C#开发中,经常需要从数据库中获取数据并将其展示在用户界面上。一种常见的做法是将数据填充到下拉列表框(ComboBox)中,以便用户可以选择。下面我们将详细介绍如何通过C#代码实现...

    C# winform 实现ICON图标的转换程序

    在本文中,我们将深入探讨如何使用C# Winform来实现一个ICON图标转换程序,该程序能够将PNG、JPEG和BMP格式的图像文件转换为ICO格式。首先,我们需要理解ICO文件格式以及C#中的图像处理。 ICO文件格式是Windows操作...

    网页设计,c#,ico小图标,共851个!

    在C#中,可以使用System.Drawing命名空间下的类来处理ICO文件,包括读取、创建和修改ICO图标。 在提供的文件列表中,我们可以看到一系列以“_16x16.png”结尾的文件名,这表明它们是16x16像素尺寸的PNG图像,通常...

    C# 动态获取当前程序的图标

    3. **读取图标资源**:接下来,使用`System.Drawing.Icon.ExtractAssociatedIcon()`方法,我们可以从可执行文件中提取图标。 ```csharp Icon programIcon = Icon.ExtractAssociatedIcon(exePath); ``` 4. **获取...

    C#读取ImageList中的图片.rar

    以上就是如何在C#中读取和使用ImageList中的图片,以及如何处理rar文件。确保正确引用System.IO和System.Drawing命名空间,以及在使用SharpCompress时引入SharpCompress库。这个过程对于Windows Forms开发者来说是...

    c#根据文件类型获取相关类型图标的方法代码

    以下是一个C#代码示例,用于根据文件类型获取相关图标的方法: 首先,我们需要导入一些必要的命名空间和DllImport特性来调用Windows API函数: ```csharp using System; using System.Drawing; using System....

Global site tag (gtag.js) - Google Analytics