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

Pet*_*erK 4 c++ windows resources icons portable-executable

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

Pet*_*erK 6

经过大量搜索,我发现默认图标不是id最低的图标.

Windows使用多种尺寸的图标来处理各种事物.有关更多信息,请查看此处,但简而言之,这里是重要信息:


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

  1. 选择RT_GROUP_ICON资源.如果存在多个此类资源,则系统使用资源脚本中列出的第一个资源.

    • 从RT_GROUP_ICON资源中选择适当的RT_ICON映像.如果存在多个图像,系统将使用以下条件选择图像:

    • 选择最接近所请求大小的图像.

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

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

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


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

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