你如何从shell32.dll中获取图标?

时间:2008-08-12 03:26:39

标签: windows icons

我想将Tree图标用于本土应用程序。有谁知道如何以.icon文件的形式提取图像?我想要16x16和32x32,或者我只是做一个屏幕截图。

11 个答案:

答案 0 :(得分:41)

在Visual Studio中,选择“文件打开...”,然后选择“文件...”。然后选择Shell32.dll。应打开文件夹树,您将在“Icon”文件夹中找到图标。

要保存图标,您可以右键单击文件夹树中的图标,然后选择“导出”。

答案 1 :(得分:37)

如果有人想要一个简单的方法,只需使用7zip解压缩shell32.dll并查找文件夹.src / ICON /

答案 2 :(得分:18)

另一种选择是使用ResourceHacker之类的工具。它处理的方式不仅仅是图标。干杯!

答案 3 :(得分:8)

我需要从shell32.dll中提取图标#238并且不想下载Visual Studio或Resourcehacker,所以我从Technet找到了几个PowerShell脚本(感谢John Grenfell和#https://social.technet.microsoft.com/Forums/windowsserver/en-US/16444c7a-ad61-44a7-8c6f-b8d619381a27/using-icons-in-powershell-scripts?forum=winserverpowershell)做了类似的事情并创建了一个新脚本(下面)以满足我的需求。

我输入的参数是(源DLL路径,目标图标文件名和DLL文件中的图标索引):

C:\ Windows \ System32下\ SHELL32.DLL

C:\温度\ Restart.ico

238

通过临时创建新快捷方式,我通过反复试验发现了我需要的图标索引#238(右键单击桌面并选择New - > Shortcut并输入calc并按两次Enter键)。然后右键单击新快捷方式并选择“属性”,然后单击“快捷方式”选项卡中的“更改图标”按钮。粘贴在路径C:\ Windows \ System32 \ shell32.dll中,然后单击“确定”。找到您要使用的图标并计算出其索引。注意:索引#2位于#1之下,而不是右侧。在我的Windows 7 x64机器上,图标索引#5位于第二列的顶部。

如果有人有更好的方法,但工作方式相似,但获得更高质量的图标,那么我有兴趣了解它。谢谢,肖恩。

#Windows PowerShell Code###########################################################################
# http://gallery.technet.microsoft.com/scriptcenter/Icon-Exporter-e372fe70
#
# AUTHOR: John Grenfell
#
###########################################################################

<#
.SYNOPSIS
   Exports an ico and bmp file from a given source to a given destination
.Description
   You need to set the Source and Destination locations. First version of a script, I found other examples but all I wanted to do as grab and ico file from an exe but found getting a bmp useful. Others might find useful
   No error checking I'm afraid so make sure your source and destination locations exist!
.EXAMPLE
    .\Icon_Exporter.ps1
.Notes
        Version HISTORY:
        1.1 2012.03.8
#>
Param ( [parameter(Mandatory = $true)][string] $SourceEXEFilePath,
        [parameter(Mandatory = $true)][string] $TargetIconFilePath
)
CLS
#"shell32.dll" 238
If ($SourceEXEFilePath.ToLower().Contains(".dll")) {
    $IconIndexNo = Read-Host "Enter the icon index: "
    $Icon = [System.IconExtractor]::Extract($SourceEXEFilePath, $IconIndexNo, $true)    
} Else {
    [void][Reflection.Assembly]::LoadWithPartialName("System.Drawing")
    [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
    $image = [System.Drawing.Icon]::ExtractAssociatedIcon("$($SourceEXEFilePath)").ToBitmap()
    $bitmap = new-object System.Drawing.Bitmap $image
    $bitmap.SetResolution(72,72)
    $icon = [System.Drawing.Icon]::FromHandle($bitmap.GetHicon())
}
$stream = [System.IO.File]::OpenWrite("$($TargetIconFilePath)")
$icon.save($stream)
$stream.close()
Write-Host "Icon file can be found at $TargetIconFilePath"

答案 4 :(得分:5)

Resources Extract是另一个工具,可以递归地从很多DLL中找到图标,非常方便的IMO。

答案 5 :(得分:3)

以上是上述解决方案的更新版本。 我添加了一个隐藏在链接中的缺失程序集。 新手不会理解这一点。 这样的样本将在没有修改的情况下运行。

ini_set('display_errors', 1);
error_reporting(E_ALL);

答案 6 :(得分:2)

只需使用IrfanView打开DLL并将结果保存为.gif或.jpg。

我知道这个问题已经过时了,但它是来自dll&#34;&#34;提取图标的第二个谷歌,我想避免在我的工作站上安装任何东西,我记得我使用的是IrfanView。 / p>

答案 7 :(得分:2)

您可以下载免费软件Resource Hacker,然后按照以下说明操作:

  1. 打开您要查找图标的任何dll文件。
  2. 浏览文件夹以查找特定图标。
  3. 从菜单栏中选择&#39;操作&#39;然后&#39;保存&#39;。
  4. 选择.ico文件的目的地。
  5. 参考:http://techsultan.com/how-to-extract-icons-from-windows-7/

答案 8 :(得分:1)

如果您使用的是Linux,则可以使用gExtractWinIcons从Windows DLL中提取图标。 它可以在gextractwinicons包中的Ubuntu和Debian中找到。

此博客文章有screenshot and brief explanation

答案 9 :(得分:1)

还有一个可用的资源,Visual Studio图像库,“可用于创建与Microsoft软件在视觉上一致的应用程序”,可能需要在底部给出许可。 https://www.microsoft.com/en-ca/download/details.aspx?id=35825

答案 10 :(得分:1)

这个问题已经在这里有了答案,但对于任何想知道如何做到这一点的新人,我使用了 7Zip 并导航到 %SystemRoot%\system32\SHELL32.dll\.rsrc\ICON,然后将所有文件复制到所需位置。

如果您想要一个预先提取的目录,您可以download the ZIP here

注意:我在 Windows 8.1 安装中提取了文件,因此它们可能与其他版本的 Windows 上的不同。