我需要以编程方式找到 Windows 可执行文件(PE 文件 = dll、exe、com..)的默认图标。我确实知道如何遍历资源并识别什么是图标,什么是光标等,但据我所知,没有一个图标以任何方式标记为默认图标。那么,有人知道如何找到默认图标吗?此外,我不想使用任何 Windows api 调用,我想自己编写该函数。问题是我不知道所有图标中哪一个是默认图标。
经过一番搜索,我发现默认图标并不是 id 最小的图标。
Windows 使用同一个图标的多种尺寸来表示不同的内容。了解更多信息,看这里 http://msdn.microsoft.com/en-us/library/ms648050%28VS.85%29.aspx,但简而言之这是重要信息:
当系统显示图标时,它必须从.exe或.dll文件中提取适当的图标图像。系统使用以下步骤来选择图标图像:
-
选择 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(使用前将#替换为@)