我想要一个函数,它可以获取 Windows 中任何文件路径(任何文件系统对象——文件、文件夹、驱动器、快捷方式等)并返回与之对应的 .ICO 文件(或带有所有图像大小表示的图标句柄)。例如,如果我在 Windows 7 中指定 'C:\MyTextFile.txt',我将获得 .txt 文件的所有 256x256、48x48、32x32 和 16x16 大小的 .ICO 文件,位置在 imageres.dll 的偏移量为 102:
^ Stardock IconPackager 安装的图标选项卡,可定位到文件系统对象的图标
从我的研究所得,这似乎并不容易。有 ExtractIconEx
函数,但它只能提供 16px 和 32px 的表示。还有 这篇文章显示了如何获取一般为 16、32、48 和 256 像素的 SHIL_SMALL、SHIL_LARGE、SHIL_EXTRALARGE 和 SHIL_JUMBO 大小,但这并不一定涵盖存储在 .ICO 文件中的其他尺寸。例如,某些图标存储的不仅仅是四个尺寸,而是 10 多个不同尺寸。
所以我想:
- 找到文件系统对象图标的位置,并
- 从 DLL、EXE 或任何封装它的资源中检索它。
我猜一个问题是:这是 Windows 注册表的任务吗?如下面所示,注册表的 txtfile->DefaultIcon 值包含了 .txt 文件类型的图标位置。
但是,也有一些独立的 .exe 文件,例如自包含一个不会存储在注册表中的图标。
最终,我希望能在 TImage 中显示所有不同大小,并且可能将它们一起输出到一个 .ICO 文件中。感谢任何帮助。
GetImage
方法时,将SIIGBF_ICONONLY
作为第二个参数使用以获取文件类型图标。它只获取图标,但在透明度方面存在问题(可能与TImage
设置有关)。 - teran