如何直接显示已知dll ID的图标?

Win*_*ike 5 windows-registry windows-7 icons

有人知道如何直接以“注册表”格式显示图标吗?例如“%SystemRoot%\system32\shell32.dll,112”,即 C:\Windows\System32\shell32.dll,112,通常是图标的 ID,因为它可以在“IconPath”值的注册表数据中找到。该路径是真实的,“112”图标代码只是一个随机数。

要点是,当 dll 由数百个图标组成时,即使使用像Icon Extractor这样的工具(当光标悬停在图标上时会显示图标信息),找到正确的图标也很麻烦。所有这些工具似乎只是以相反的方式起作用:必须加载 dll,然后希望找到带有相应代码的图标。

Bis*_*iyo 4

文件类型的图标是嵌入已知DLL中的资源(即任何类型的图像、媒体等)。该图标编号(或图标组索引)不是随机的。DLL 文件有一个部分来存储这些资源。每个图标都存储有唯一的编号。一种类型的图标可以由不同的图标大小、尺寸和位深度组成。该图标 ID 来自图标组编号,因此当用户更改缩放级别时,它仅更改图标大小而不更改图标本身。

通过一个例子就可以很容易地理解这一点。对于本例,我使用Resource Hacker。以下是 Resource Hacker 中快捷方式文件(.LNK 扩展名)的图标截图(图标可能有所不同):

Resource_Hacker_Shell32

这是注册表设置:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.lnk\ShellNew]
"Handler"="{ceefea1b-3e29-4ef1-b34c-fec79c4f70af}"
"IconPath"="%SystemRoot%\system32\shell32.dll,-16769"
"ItemName"="@shell32.dll,-30397"
"MenuText"="@shell32.dll,-30318"
"NullFile"=""
Run Code Online (Sandbox Code Playgroud)

看到数字“16769”,将其与屏幕截图进行匹配。但是如何在Resource Hacker中打开它呢?答案:下载并运行该软件 --> 复制shell32.dll(或任何 dll/exe 文件)到桌面/工作文件夹中 --> 将该文件拖到 Resource Hacker 窗口中 --> 双击“图标组” --> 滚动到那个数字。请注意,一个图标组中有许多图标,其尺寸为 16x16、20x20 等。这些图标适用于文件资源管理器中的不同缩放级别。