在可执行文件的资源中,如何找到默认图标?

问题描述 投票:4回答:2

我需要以编程方式找到Windows可执行文件的默认图标(PE文件= dll,exe,com ..)。我确实知道如何遍历资源并确定什么是图标,什么光标等,但是据我所知,这些图标都没有以任何方式标记为默认图标。那么,有人知道如何找到默认图标吗?此外,我不想使用任何Windows api调用,我想自己编写函数。问题是我不知道所有图标中的哪一个是默认图标。

c++ windows resources icons portable-executable
2个回答
7
投票

经过大量搜索后,我发现默认图标不是ID最低的图标。

Windows使用多种大小的一个图标来处理各种事情。有关更多信息,请单击look here,但简而言之这里是重要信息:


[当系统显示图标时,它必须从.exe或.dll文件中提取适当的图标图像。系统使用以下步骤选择图标图像:

  1. 选择RT_GROUP_ICON资源。如果有多个这样的资源存在,系统使用第一个资源中列出的资源脚本。

    • 选择适当的RT_ICON图像来自RT_GROUP_ICON资源。如果存在多个图像,系统使用以下条件选择图像:

    • 图像尺寸最接近选择要求的尺寸。

    • 如果该尺寸的两个或更多图像存在,与选择显示器的颜色深度。

    • 如果没有图像与颜色完全匹配显示深度,图像最大的色彩深度不超过选择显示。如果全部超过颜色深度,最低的颜色选择颜色深度。

注:系统将所有等于或大于8 bpp的颜色深度都视为相等。因此,在同一资源中包含16x16 256色图像和16x16 16色图像没有优势-系统将简单地选择它遇到的第一个图像。当显示屏处于8-bpp模式时,系统将在256色图标上选择16色图标,并使用系统默认调色板显示所有图标。


由于请求的尺寸为16x16(因为这是系统的小图标尺寸,即默认图标尺寸),我认为我们可以说默认图标是第一个图标组中尺寸最小的图标(否具有最大颜色深度的图标(小于16x16的图标)。

编辑:较小的更正。资源中显然可能包含大小小于16x16的图标,但这表示该文件没有默认图标,然后系统会改为提供自己的图标。


4
投票

您找到的第一个是默认值。

默认图标只是ID最低的图标,因此,根据定义,它是枚举资源时发现的第一个图标。

© www.soinside.com 2019 - 2024. All rights reserved.