让我们一步一步来展示。首先,您需要查看 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% 的成功率)。