如何使用Delphi从某些exe文件中提取所有图标并将它们插入到其他exe文件中?

5
我正在使用Delphi。 我想知道如何从一个exe文件中提取(所有)图标,并将它们插入到另一个exe文件中,保留图标的顺序和索引。 我通过Google找到了一些使用Delphi代码的示例,但问题是它并不能提取所有图标。 我也找到了一些编译好的程序(exes),可以完成其中之一,但不能同时完成两个操作。 为什么需要这样做:因为我需要从虚拟应用程序启动一些带有这些图标的exe文件。而且我想制作一些外部exe文件,它们具有相同的名称和相同的图标。 谢谢你的帮助。

我认为你需要一个资源编辑器。 - Toon Krijthe
你不能修复你找到的代码,让它提取所有图标而不仅仅是其中一些吗?如果你已经找到了完成一个部分的程序,又找到了完成另一个部分的程序,那么是什么阻止你将它们合并成一个同时完成两个部分的程序呢?请更具体地说明你在任务的哪个部分遇到了问题。 - Rob Kennedy
抱歉大家,我很久没有网络连接了,所以没能及时回复... @Rob,我尝试过了,但是使用的 API 函数/过程无法实现那个功能... - Tudor Cristea
@Rob和我发现了一些exe程序(我称它们为“已编译”,如果这样做是错误的,对不起),那么我该如何将它们合并成一个...? - Tudor Cristea
提取单个图标很容易(请参见https://dev59.com/zlDTa4cB1Zd3GeqPL8fS),但提取所有图标可能需要您至少从资源编辑器中借用代码,如下面的答案所示,以枚举资源。 - Warren P
3个回答

3

现在我可以访问链接了。程序似乎工作正常,但提取我需要的代码需要一些工作... - Tudor Cristea

3

在我的 Delphi 版本(7)中编译不好:[错误] HexDump.pas(468):此操作数类型不适用于运算符 [错误] HexDump.pas(483):需要数组类型 [错误] HexDump.pas(495):此操作数类型不适用于运算符 [致命错误] RXMain.pas(12):无法编译使用的单元 'HexDump.pas'。我会尝试在更新的版本中编译。 - Tudor Cristea
我使用了Delphi的新版本进行编译。问题是它不能很好地识别它们。例如,在一个“分支”中,它将所有内容都视为32x32x32。我尝试提取其中的几个,但最后一位都是相同的文件... - Tudor Cristea

1

关于提取图标,之前有一个类似的问题。PrivateExtractIcons可以让您访问图标资源中特定图像大小,但您需要事先知道这些大小,并且Microsoft警告说此方法不适用于一般用途

在Delphi Praxis上有一个可行的示例,可以提取包含所有图像大小的整个图标资源。该示例存在256像素图像的问题,因此需要进行调整以解决这些问题。


非常适用于单个图标,但似乎 OP 想要枚举所有资源,因此 PrivateExtractIcons 只会获取其中一个。当然,由于这是主要的一个,所以看起来是一个很好的起点! - Warren P
就像我说的那样,我会避免使用PrivateExtractIcons函数。你可以枚举RT_GROUP_ICON资源并对每个资源使用Delphi Praxis示例代码。 - Bruce McGee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接