2

我正在尝试编写一个 unix 命令行实用程序,该实用程序将从 Windows Mobile 可执行文件中提取“应用程序”图标。当我从 icoutils 包中查看带有wrestool的 .exe 时,我看到了多个图标和 group_icon 资源。我试图弄清楚 Windows Mobile 程序视图会选择向最终用户显示哪个图标。

起初,我认为它应该是名称为 32512 (IDI_APPLICATION) 的图标,但后来我发现几个 Windows Mobile 二进制文件缺少此图标资源,但在 Programs 视图中果然有可见图标。

有没有简单但正确的算法?像最低的资源ID?.exe 中是否还有其他资源可以告诉我应用程序图标是什么?我有什么明显的遗漏吗?

任何见解将不胜感激。

4

2 回答 2

1

它是RT_GROUP_ICON可执行文件中的第一个资源。

于 2008-11-22T20:04:24.570 回答
1

让我们一步一步来展示。首先,您需要查看 EXE 中的内容:

wrestool -l file.exe

通常情况下,最好的图标是第一个 GROUP_ICON,但是当 GROUP_ICON 名称是单词而不是数字时,然后是最大尺寸的 GROUP_ICON(如果第一个 GROUP_ICON 为空白,则需要提取第二大尺寸)。

wrestool -x -t14 -n(GROUP_ICON name) file.exe > file.ico

如果你想创建一个完美的代码,你可能也应该包含 GROUP_ICON 语言(有时 exe 没有语言(16 位应用程序),所以你需要把两个代码都放好):

wrestool -x -t14 -n(GROUP_ICON name) -l(GROUP_ICON language) file.exe > file.ico

在某些应用程序中,GROUP_ICON 提取将失败。那是因为一些新的应用程序(比如新游戏)使用 GROUP_ICON 作为链接,并在 ICON 中插入真实的图标。然后,您将需要使用该代码提取最大的 ICON:

wrestool -x -R -t3 -n(ICON name) -o. file.exe > file.ico

但是会有一个大问题。这将提取 ICON,但文件的一小部分将丢失,这对于以 .ico 格式打开此文件至关重要。您需要在十六进制编辑器中打开该文件,并在文件中插入一点 HEX 代码,然后再插入其他所有内容。

00 00 01 00 01 00 80 80 00 00 01 00 18 00 28 C8 00 00 16 00 00 00

也许,现在你认为这就是结束了。不。更糟糕的部分来了:从 ICO 中提取正确的图片。首先,您不仅需要 wrestool,还需要 icotool。然后,使用该代码:

icotool -l file.ico

然后,您将需要提取具有最大宽度、高度和位深度的文件。

icotool -x -o. -w(Width) -h(Height) -b(Bit-depth) file.ico

结果将是一个带有完美图标的 PNG 文件。有时,该代码可能会失败(例如:程序“Robust Motion Deblurring”),然后您需要第二个转换器才能从 ICO 更改为 PNG,但该转换器在某些情况下可能会失败(例如:游戏“质量效应”) ,因此您的代码中可能需要两者。

我曾经在一个 Objective-C 程序中使用过这个逻辑,所以我知道它是有效的(直到现在,99.9% 的成功率)。

于 2013-03-27T13:24:50.830 回答