Discussion: Dossier: Modifications avancées: L'édition de DLL
Afficher un message
#3
Vieux 27/06/2006, 13h20
L'édition avec reshack
Anti-trust
Z'avez pas vu Cortex ?
Avatar de Anti-trust
Ultimate
Date d'inscription : décembre 2002
Messages : 11 004
Anti-trust est déconnecté
Vous allez voir ici comment remplacer une icône contenue dans une dll avec reshack. Mais avant toute chose, un petit point technique sur la structure des fichiers icône ( .ico ) et des dll est nécessaire.

Le fichier .ico
Le fichier ico peut être assimilé à un conteneur. En effet, de part la nécessité d'afficher une même icône dans différents formats ( taille et profondeur de couleur ) en fonction de la zone de l'interface, le fichier ico intègre plusieurs instances de la même image. Les instances sont définies en fonction de leur taille ( 16x16, 24x24, 48x48 pixels, etc ... ) et par le nombre de couleurs utilisées ( 16, 256, ou 32bits + couche alpha pour la transparence ).

Lorsque par exemple vous ouvrez une icône avec un éditeur dédié comme iconworkshop, celui ci affiche systématiquement l'ensemble des instances de taille et couleur sous forme de liste. Vous êtes ensuite libre de modifier l'instance de votre choix, sans que cela n'impacte le reste des instances. Au delà de la taille et des couleurs, chaque instance est donc indépendante et peut être constituée d'image différente.
Evidement, il y a peu d'intérêt à utiliser un fichier ico dont les instances seraient complètement différentes.

Sachez que sous XP, ce sont majoritairement les instances en 16 millions de couleurs/32bits alpha qui sont utilisées par le shell ( notamment pour les raccourcis, grosses icônes, panneau de config, etc ... ) mais que les icônes en 16 et 256 couleurs sont toujours d'actualité. En effet, ces formats ne permettant pourtant pas un bon rendu visuel sont utilisés pour toutes les petites icônes disséminées par ci par la dans l'interface et dont la présence visuelle est limitée.

Le fichier DLL
Passons aux librairies dynamiques maintenant, plus communément appelées Dll.
Outre leur fonction au sein du système que nous ne développerons pas ici, ces fichiers emmagasinent donc des ressources graphiques diverses comme des fichiers bmp, png, avi, ico, cur, etc ... Ces ressources pouvant bien évidement être modifiées. La structure d'une dll est toujours la même et quelque soit l'éditeur de ressource que vous utiliserez, la présentation des ressources sera identique, en l'occurrence sous forme d'arborescence.

Généralement, chaque type de ressource a sa propre branche dans l'arborescence sous la forme d'un sous répertoire nommé suivant le type de ressource. Ainsi, vous trouverez très régulièrement un sous répertoire bitmap, cur ou encore AVI. Quand aux icônes, la structure peut être légerement différente.
Comme indiqué plus haut, les icônes intègrent plusieurs instances. Les Dll intègrent donc une branche détaillant l'ensemble des fichiers ico embarqués mais également une branche détaillant la liste de toutes les instances de tous les fichiers ico. Cette double structure permet au système d'identifier facilement l'instance à utiliser en fonction de la zone qui va afficher l'icône.
La branche dédié au type "icônes complètes" se nomme Icon Group et la branche dédiée au type des instances Icon.

Pour chaque ressource appartenant à une branche de type, un sous répertoire portant le nom de la ressource existe ( souvent un nombre ), contenant lui même une ligne nommée 1036 correspondant au langage.


Dernière chose concernant les ressources de type icône, lorsque vous déroulerez et afficherez sous reshack une ressource de type Icon group (voir le 2nd screen juste au dessus ), vous pourrez voir s'afficher dans le volet de droite l'ensemble des instances de l'icône, alors que l'affichage d'une ressource de la branche Icon ne permettra d'afficher que l'instance désignée.
Information: Même si une dll contient un nombre d'icône et d'instance donné, vous pouvez sans problème utiliser des icônes de remplacement intégrant moins d'instances de taille et de couleur. Il est tout de même fortement conseillé de conserver les instances de taille d'origine. En effet, si une instance de 16x16 est censée être appelée par le système, utiliser une icône de remplacement ne contenant pas cette taille risque de poser problème.
Utiliser Reshack
Passons à l'édition à proprement parlé maintenant. Lancez reshack et ouvrez votre copie de shell32 depuis votre répertoire de travail.

Comme indiqué plus haut, vous allez constater la présence de l'arborescence des ressources dans le volet de gauche, celui de droite étant vide. Ce même volet de droite ne sert qu'a afficher la ressource lorsque vous cliquerez sur une ligne 1036 du volet de gauche.
Déroulez la branche Icon group sur la ressource de votre choix ( pour l'exemple, la numéro 5 correspondant à l'icône des dossiers ) et cliquez sur 1036. Vous voyez donc apparaître à droite toutes les instances contenues dans l'icône n° 5, ainsi que le détail des tailles et nombre de couleur. L'info Ordinal name correspondant aux noms des différents sous répertoires d'instances de la branche Icon constituant la ressource Icon Group 5.

Voici la marche à suivre pour remplacer la ressource 5:
Clic droit sur la ligne 1036 de 5
Cliquez sur Replace resource...
Dans la nouvelle fenêtre, cliquez sur Open file with new icon...
Sélectionnez votre icône de remplacement depuis votre rép. de travail
Cliquez sur Replace
Votre icône a été automatiquement modifiée dans reshack, vous pouvez le voir dans le volet de droite.
Il ne vous reste plus qu'a sauvegarder votre dll en cliquant sur le menu File puis Save. Comme toujours sous reshack, la dll ouverte est dupliquée lors de la sauvegarde afin de conserver une version d'origine en cas de problème. Pensez à conserver soigneusement cette copie.

Une dernière petite chose concernant les instances :
Si votre icône de remplacement contient moins d'instance que l'icône remplacée, vous constaterez que le contenu de la branche Icon a été mis à jour lors du remplacement. Sachant qu'un répertoire de Icon correspond à une instance, le nombre total de rép. de Icon aura diminué d'autant qu'il y a d'instance en moins dans votre icône de remplacement.
Information: Vous pouvez effectuer l'opération de remplacement sous reshack autant de fois que vous voulez avant de sauvegarder via le menu File.
Petite vérification
Si vous le souhaitez, vous pouvez contrôler votre dll modifiée à l'aide de Axialis iconworkshop ou Microangelo. En effet, ces deux éditeurs sont capables d'ouvrir les fichier dll et d'afficher toutes les icônes qu'ils contiennent.
Voici le contenu de shell32 d'origine et d'une shell32 modifiée avec les icônes Gorilla :

Dernière modification par bubka ; 25/04/2009 à 13h15.

Réponse avec citation Haut de page