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

2024-02-20

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


经过一番搜索,我发现默认图标并不是 id 最小的图标。

Windows 使用同一个图标的多种尺寸来表示不同的内容。了解更多信息,看这里 http://msdn.microsoft.com/en-us/library/ms648050%28VS.85%29.aspx,但简而言之这是重要信息:


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

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

    • 选择合适的RT_ICON图像 来自 RT_GROUP_ICON 资源。如果 存在不止一张图像, 系统使用以下标准 选择图像:

    • 尺寸最接近的图像 选择所需的尺寸。

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

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

Note:系统将 8 bpp 或以上的所有颜色深度视为相同。因此,在同一资源中包含 16x16 256 色图像和 16x16 16 色图像没有任何优势 - 系统只会选择遇到的第一个图像。当显示器处于 8-bpp 模式时,系统将选择 16 色图标而不是 256 色图标,并使用系统默认调色板显示所有图标。


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

编辑:一个小修正。尺寸小于 16x16 的图标显然可能位于资源中,但这表明该文件没有默认图标,并且系统会提供自己的图标。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐