2008-11-22 7 views
2

J'essaye d'écrire un utilitaire de ligne de commande d'unix qui extraira l'icône "d'application" d'un exécutable de Windows Mobile. Lorsque je regarde à l'intérieur du fichier .exe avec wrestool à partir du paquet icoutils, je vois plusieurs icônes et ressources group_icon. J'essaie de comprendre quelle icône la vue Programmes Windows Mobile choisirait d'afficher à l'utilisateur final. Au début, j'ai pensé que ce serait l'icône avec le nom 32512 (IDI_APPLICATION), mais ensuite j'ai trouvé plusieurs binaires Windows Mobile qui manquaient de cette ressource d'icône, mais assez bien des icônes visibles dans la vue Programmes.Windows Mobile: Quelle icône est l'icône de l'application?

Existe-t-il un algorithme simple mais correct? comme l'identifiant de ressource le plus bas? Y a-t-il une autre ressource dans le fichier .exe qui me dit quelle est l'icône de l'application? Y a-t-il quelque chose d'évident qui me manque?

Tout aperçu serait apprécié.

Répondre

1

C'est la première ressource RT_GROUP_ICON dans l'exécutable.

1

Montrons par étapes. Tout d'abord, vous devez regarder ce qui est dans votre EXE:

wrestool -l file.exe 

Normalement, la meilleure icône de son premier GROUP_ICON, mais quand les noms de GROUP_ICONs sont des mots au lieu de chiffres, puis est le GROUP_ICON avec la plus grande taille (ou la deuxième plus grande taille si le premier GROUP_ICON est vide, vous devrez extraire les deux).

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

Si vous voulez créer un code parfait, vous devriez probablement inclure le trop langage GROUP_ICON (parfois l'exe ne sera pas une langue (applications 16 bits), vous aurez donc besoin de mettre les deux de la codes):

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

Dans certaines applications, l'extraction GROUP_ICON échouera. En effet, certaines nouvelles applications (comme les nouveaux jeux) utilisent GROUP_ICON comme lien, et insèrent les icônes réelles dans les ICONs. Ensuite, vous aurez besoin d'extraire la plus grande icône avec ce code:

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

mais il y aura un gros problème. Cela va extraire l'ICONE, mais une petite partie du fichier manquera, ce qui est essentiel pour ouvrir ce fichier en .ico. Vous devrez ouvrir ce fichier dans un éditeur hexadécimal et insérer dans le fichier un petit code HEX avant tout le reste.

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

Probablement, maintenant vous pensez que c'est la fin. NON. Le pire est à venir: extraire la bonne image de l'ICO. Premièrement, vous aurez besoin non seulement de wrestool, mais d'icotool. Ensuite, utilisez ce code:

icotool -l file.ico 

Ensuite, vous devez extraire le fichier avec la plus grande largeur, hauteur et profondeur de bits.

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

Le résultat sera un fichier PNG avec l'icône parfaite. Parfois, ce code peut échouer (Exemple: le programme "Robust Motion Deblurring"), alors vous aurez besoin d'un second converseur pour passer de ICO à PNG, mais ce converseur peut échouer dans certains cas (Exemple: Le jeu "Mass Effect") , donc vous aurez probablement besoin des deux dans votre code.J'ai utilisé cette logique dans un programme Objective-C une fois, donc je sais que c'est fonctionnel (et jusqu'à présent, avec 99,9% de réussite).

+0

J'ai oublié de dire: parfois, il y aura plus d'un 'GROUP_ICON' avec les meilleures ressources. Dans ce cas, si la variable 'name' est numérique, la bonne est le nombre' 0'. Si 'nom' est un nom, le nom correct est le plus lourd (avec la plus grande' taille'). – VitorMM

Questions connexes