我想要一个函数,它采用 Windows 中的任何文件路径(任何文件系统对象——文件、文件夹、驱动器、快捷方式等)并返回关联的 .ICO 文件(或带有所有图像大小表示的图标的一些句柄) . 例如,如果我在 Windows 7 中指定了“C:\MyTextFile.txt”,我将在位于 imageres 的 .ICO 文件中获得 .txt 文件的所有 256x256、48x48、32x32 和 16x16 表示。偏移量 102 处的 dll:
^ Stardock IconPackager 安装的图标选项卡,用于定位文件系统对象的图标
从我目前的研究来看,这似乎并不容易。有这个ExtractIconEx
功能,但它只给出 16 和 32 像素的表示。还有这篇文章展示了如何获取SHIL_SMALL
、SHIL_LARGE
、SHIL_EXTRALARGE
和SHIL_JUMBO
尺寸,它们通常分别为 16、32、48 和 256 像素。但是,这并不一定涵盖将存储在 .ICO 文件中的其他大小。例如,一些图标存储 10 个或更多不同的大小,而不仅仅是四个。
所以,我试图:
- 找到文件系统对象图标的位置,然后
- 从 DLL、EXE 或任何封装它的资源中检索它。
我想一个问题是:这是 Windows 注册表的任务吗?如下所示,注册表的 txtfile->DefaultIcon 值包含 .txt 文件类型的图标位置。
但是,也有独立的 .exe 文件,例如,它包含一个不会存储在注册表中的图标。
最终,我想在一个 TImage 中显示所有不同的大小,并可能将它们一起输出到一个 .ICO 文件中。任何帮助,将不胜感激。