从 EXE/DLL 中提取图标和图标操作






4.83/5 (35投票s)
如何从 EXE/DLL 中提取图标,拆分/合并图标,以及获取与文件关联的图标。
摘要
本文档描述了如何从可执行模块(EXE 或 DLL)中提取图标,以及如何获取与文件关联的图标。
在本文中,您将找到获取最适合您想要显示的大小图标图像的方法。您还可以找到如何拆分图标文件以获取其图像的方法。
引言
图标种类繁多——它们有许多尺寸和颜色深度。单个图标资源——ICO 文件,或 EXE 或 DLL 文件中的图标资源——可以包含多个图标图像,每个图像具有不同的尺寸和/或颜色深度。
Windows 会根据图标的使用上下文,从资源中提取适当的尺寸/颜色深度的图像。Windows 还提供了一系列 API,用于访问和显示图标和图标图像。
我介绍的代码将帮助您从可执行模块(EXE、DLL)中提取图标,而无需了解在这种情况下使用的 Windows API。
该代码还将帮助您从图标文件中提取特定的图标图像,并帮助您提取最适合指定图标大小的图标图像。
背景
如果您想了解此代码的工作原理,您应该知道如何从 C# 代码调用 API。您还需要了解图标格式,您可以在此处找到相关信息:MSDN。
使用代码
首先,您需要添加对 TAFactory.IconPack.dll 的引用,或者将名为 IconPack 的项目添加到您的项目中。
将以下语句添加到您的代码中
using TAFactory.IconPack;
使用 IconHelper
类按如下方式获取图标
//Get the open folder icon from shell32.dll.
Icon openFolderIcon = IconHelper.ExtractIcon(@"%SystemRoot%\system32\shell32.dll", 4);
//Get all icons contained in shell32.dll.
List<icon> shellIcons = IconHelper.ExtractAllIcons(@"%SystemRoot%\system32\shell32.dll");
//Split the openFolderIcon into its icon images.
List<icon> openFolderSet = IconHelper.SplitGroupIcon(openFolderIcon);
//Get the small open folder icon.
Icon smallFolder = IconHelper.GetBestFitIcon(openFolderIcon,
SystemInformation.SmallIconSize);
//Get large icon of c drive.
Icon largeCDriveIcon = IconHelper.GetAssociatedLargeIcon(@"C:\");
//Get small icon of c drive.
Icon smallCDriveIcon = IconHelper.GetAssociatedSmallIcon(@"C:\");
//Merge icon images in a single icon.
Icon cDriveIcon = IconHelper.Merge(smallCDriveIcon, largeCDriveIcon);
//Save the icon to a file.
FileStream fs = File.Create(@"c:\CDrive.ico");
cDriveIcon.Save(fs);
fs.Close();