65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.83/5 (35投票s)

2009 年 1 月 17 日

CPOL

2分钟阅读

viewsIcon

159221

downloadIcon

11080

如何从 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();

参考文献

© . All rights reserved.