Windows Mobile: какой значок является значком приложения? - PullRequest
2 голосов
/ 22 ноября 2008

Я пытаюсь написать утилиту командной строки Unix, которая будет извлекать значок «приложения» из исполняемого файла Windows Mobile. Когда я заглядываю внутрь .exe с wrestool из пакета icoutils, я вижу несколько ресурсов icon и group_icon. Я пытаюсь выяснить, какой значок в представлении «Программы для Windows Mobile» будет отображаться для конечного пользователя.

Сначала я подумал, что это будет значок с именем 32512 (IDI_APPLICATION), но затем я обнаружил несколько двоичных файлов Windows Mobile, в которых отсутствовал этот ресурс значков, но, несомненно, были видимые значки в представлении «Программы».

Есть ли простой, но правильный алгоритм? как самый низкий идентификатор ресурса? Есть ли в .exe другой ресурс, который сообщает мне, что означает значок приложения? Есть ли что-то очевидное, чего мне не хватает?

Любое понимание будет оценено.

Ответы [ 2 ]

1 голос
/ 27 марта 2013

Покажем пошагово. Во-первых, вам нужно посмотреть, что находится внутри вашего EXE:

wrestool -l file.exe

Обычно лучшим значком является первый GROUP_ICON, но когда имена GROUP_ICONs представляют собой слова вместо цифр, тогда GROUP_ICON имеет наибольший размер (или второй по величине размер, если первый GROUP_ICON пуст, вам нужно извлечь и).

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

Если вы хотите создать идеальный код, вам, вероятно, следует также включить язык GROUP_ICON (иногда у исполняемого файла не будет языка (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. Вам нужно будет открыть этот файл в шестнадцатеричном редакторе и вставить в него небольшой шестнадцатеричный код, прежде чем все остальное.

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

Возможно, теперь вы думаете, что это конец. NO. Приближается худшая часть: извлеките правильную картинку из 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, но в некоторых случаях этот собеседник может выйти из строя (Пример: игра «Mass Effect») , так что вам, вероятно, понадобится оба в вашем коде.

Я однажды использовал эту логику в программе Objective-C, поэтому я знаю, что она функциональна (и до сих пор с 99,9% успеха).

1 голос
/ 22 ноября 2008

Это первый RT_GROUP_ICON ресурс в исполняемом файле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...