我需要以编程方式找到Windows可执行文件的默认图标(PE文件= dll,exe,com ..)。我确实知道如何遍历资源并确定什么是图标,什么光标等,但是据我所知,这些图标都没有以任何方式标记为默认图标。那么,有人知道如何找到默认图标吗?此外,我不想使用任何Windows api调用,我想自己编写函数。问题是我不知道所有图标中的哪一个是默认图标。
经过大量搜索后,我发现默认图标不是ID最低的图标。
Windows使用多种大小的一个图标来处理各种事情。有关更多信息,请单击look here,但简而言之这里是重要信息:
[当系统显示图标时,它必须从.exe或.dll文件中提取适当的图标图像。系统使用以下步骤选择图标图像:
选择RT_GROUP_ICON资源。如果有多个这样的资源存在,系统使用第一个资源中列出的资源脚本。
选择适当的RT_ICON图像来自RT_GROUP_ICON资源。如果存在多个图像,系统使用以下条件选择图像:
图像尺寸最接近选择要求的尺寸。
如果该尺寸的两个或更多图像存在,与选择显示器的颜色深度。
如果没有图像与颜色完全匹配显示深度,图像最大的色彩深度不超过选择显示。如果全部超过颜色深度,最低的颜色选择颜色深度。
注:系统将所有等于或大于8 bpp的颜色深度都视为相等。因此,在同一资源中包含16x16 256色图像和16x16 16色图像没有优势-系统将简单地选择它遇到的第一个图像。当显示屏处于8-bpp模式时,系统将在256色图标上选择16色图标,并使用系统默认调色板显示所有图标。
由于请求的尺寸为16x16(因为这是系统的小图标尺寸,即默认图标尺寸),我认为我们可以说默认图标是第一个图标组中尺寸最小的图标(否具有最大颜色深度的图标(小于16x16的图标)。
编辑:较小的更正。资源中显然可能包含大小小于16x16的图标,但这表示该文件没有默认图标,然后系统会改为提供自己的图标。
您找到的第一个是默认值。
默认图标只是ID最低的图标,因此,根据定义,它是枚举资源时发现的第一个图标。