begin process at 2012 02 17 08:27:52
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichier / Disque

 > AJOUTER OU MODIFIER UNE RESSOURCE ICONE DANS UN EXÉCUTABLE OU DLL...

AJOUTER OU MODIFIER UNE RESSOURCE ICONE DANS UN EXÉCUTABLE OU DLL...


 Information sur la source

Note :
9,75 / 10 - par 4 personnes
9,75 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Fichier / Disque Niveau :Initié Date de création :11/12/2004 Vu / téléchargé :9 865 / 975

Auteur : ShareVB

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (9)
Ajouter un commentaire et/ou une note


 Description

Ce code permet de modifier ou d'ajouter une icone à un executable compilé ou à une dll.

Vous choisissez un fichier exe, un fichier ico, un langue d'icone, un ID de groupe (numérique), un ID d'icone (numérique), vous cliquez sur ajouter / modifier et l'icone est ajouter à l'exe choisi...

ce code ne permet pas de lister les icones contenues dans l'exe...peut être à venir...

Source

  • Option Explicit
  • 'entete d'un fichier icone
  • Public Type ICONDIR
  • idReserved As Integer ' Reserved (must be 0)
  • idType As Integer ' Resource Type (1 for icons)
  • idCount As Integer ' How many images?
  • 'ICONDIRENTRY idEntries[1]; // An entry for each image (idCount of 'em)
  • End Type
  • 'décrit chaque icone du fichier
  • Public Type ICONDIRENTRY
  • bWidth As Byte ' Width, in pixels, of the image
  • bHeight As Byte ' Height, in pixels, of the image
  • bColorCount As Byte ' Number of colors in image (0 if >=8bpp)
  • bReserved As Byte ' Reserved ( must be 0)
  • wPlanes As Integer ' Color Planes
  • wBitCount As Integer ' Bits per pixel
  • dwBytesInRes As Long ' How many bytes in this resource?
  • dwImageOffset As Long ' Where in the file is this image?
  • End Type
  • 'entete de ressource groupe d'icone
  • Public Type GRPICONDIR
  • idReserved As Integer ' Reserved (must be 0)
  • idType As Integer ' Resource Type (1 for icons)
  • idCount As Integer ' How many images?
  • 'ICONDIRENTRY idEntries[1]; // An entry for each image (idCount of 'em)
  • End Type
  • 'décrit chaque ressource icone
  • Public Type GRPICONDIRENTRY
  • bWidth As Byte ' Width, in pixels, of the image
  • bHeight As Byte ' Height, in pixels, of the image
  • bColorCount As Byte ' Number of colors in image (0 if >=8bpp)
  • bReserved As Byte ' Reserved ( must be 0)
  • wPlanes As Integer ' Color Planes
  • wBitCount As Integer ' Bits per pixel
  • dwBytesInRes As Long ' How many bytes in this resource?
  • dwIconID As Integer ' Where in the file is this image?
  • End Type
  • 'fichier de donnée
  • Public Type Dat
  • ' des données
  • Data() As Byte
  • End Type
  • 'un fichier icone
  • Public Type Ico
  • IcoDir As ICONDIR 'entete
  • Entries() As ICONDIRENTRY 'decrit chaque icone
  • IcoData() As Dat 'données
  • End Type
  • 'une ressoure de groupe d'icones
  • Public Type IcoExe
  • 'décrit le groupe d'icones
  • IcoDir As GRPICONDIR
  • 'décrit l'icone
  • Entries() As GRPICONDIRENTRY
  • End Type
  • 'obtient un handle de modification de ressource
  • Private Declare Function BeginUpdateResource Lib "kernel32.dll" Alias "BeginUpdateResourceA" (ByVal pFileName As String, ByVal bDeleteExistingResources As Long) As Long
  • 'met à jour des infos de ressource
  • Private Declare Function UpdateResource Lib "kernel32.dll" Alias "UpdateResourceA" (ByVal hUpdate As Long, ByVal lpType As Long, ByVal lpName As Long, ByVal wLanguage As Long, lpData As Any, ByVal cbData As Long) As Long
  • 'enregistre des infos de ressource dans le fichier
  • Private Declare Function EndUpdateResource Lib "kernel32.dll" Alias "EndUpdateResourceA" (ByVal hUpdate As Long, ByVal fDiscard As Long) As Long
  • 'copie une zone mémoire dans une autre
  • Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
  • 'ressource icone
  • 'type Resource Icone
  • Private Const RT_ICON As Long = 3&
  • Private Const DIFFERENCE As Long = 11
  • 'type groupe d'icones
  • Private Const RT_GROUP_ICON As Long = (RT_ICON + DIFFERENCE)
  • 'ouvrir un fichier icone
  • '========================
  • 'FileName : nom du fichier icone
  • 'renvoie le contenu formatté du fichier icone
  • Public Function OpenIconFile(FileName As String) As Ico
  • Dim t As Ico 'structure temporaire
  • Dim X As Long 'compteur
  • 'on ouvre le fichier
  • Open FileName For Binary As #1
  • 'on récupère l'entete du fichier
  • Get #1, , t.IcoDir
  • 'redimensionne au nombre d'icones
  • ReDim t.Entries(0 To t.IcoDir.idCount - 1)
  • ReDim t.IcoData(0 To t.IcoDir.idCount - 1)
  • 'pour chaque icones
  • For X = 0 To t.IcoDir.idCount - 1
  • 'récupère l'entete de l'icone
  • Get #1, 6 + 16 * X + 1, t.Entries(X)
  • 'redimensionne à la taille des données
  • ReDim t.IcoData(X).Data(t.Entries(X).dwBytesInRes - 1)
  • 'récupère les données
  • Get #1, t.Entries(X).dwImageOffset + 1, t.IcoData(X).Data
  • Next
  • 'ferme le fichier
  • Close #1
  • 'renvoie les données
  • OpenIconFile = t
  • End Function
  • 'transforme un fichier icone en ressource icone et groupe d'icones
  • '=============================================
  • 'IcoFile : structure formattée du fichier icone
  • 'IDBase : ID de base des icones
  • 'renvoie une structure ressource icone
  • Private Function MakeIcoExe(IconFile As Ico, IDBase As Long) As IcoExe
  • Dim t As IcoExe 'structure temporaire
  • Dim X As Long 'compteur
  • 'nombre d'icones
  • t.IcoDir.idCount = IconFile.IcoDir.idCount
  • 'type : Icone = 1
  • t.IcoDir.idType = 1
  • 'chaque entrée
  • ReDim t.Entries(IconFile.IcoDir.idCount - 1)
  • 'pour chaque entrée
  • For X = 0 To t.IcoDir.idCount - 1
  • 'entete d'icones
  • t.Entries(X).bColorCount = IconFile.Entries(X).bColorCount
  • t.Entries(X).bHeight = IconFile.Entries(X).bHeight
  • t.Entries(X).bReserved = IconFile.Entries(X).bReserved
  • t.Entries(X).bWidth = IconFile.Entries(X).bWidth
  • t.Entries(X).dwBytesInRes = IconFile.Entries(X).dwBytesInRes
  • t.Entries(X).dwIconID = X + IDBase
  • t.Entries(X).wBitCount = IconFile.Entries(X).wBitCount
  • t.Entries(X).wPlanes = IconFile.Entries(X).wPlanes
  • Next
  • 'renvoie la structure
  • MakeIcoExe = t
  • End Function
  • 'remplace l'icone du fichier
  • '===============================
  • 'FileName : nom du fichier executable
  • 'IcoFile : nom du fichier icone
  • 'BaseID : ID de base de l'icone
  • 'GroupID : ID du groupe d'icones
  • 'LangID : ID de la langue de l'icone
  • Public Function ReplaceIcoInExe(FileName As String, IcoFile As Ico, BaseID As Long, GroupID As Long, LangID As Long) As Boolean
  • Dim hWrite As Long 'handle de modification
  • Dim Exe As IcoExe 'structure de ressource icone
  • Dim ret As Long 'valeur de retour
  • Dim X As Long 'compteur
  • Dim D() As Byte 'buffer
  • 'obtient un handle de modification
  • hWrite = BeginUpdateResource(FileName, 0)
  • 'si échec, on quitte
  • If hWrite = 0 Then ReplaceIcoInExe = False: Exit Function
  • 'sinon, on lit l'icone
  • Exe = MakeIcoExe(IcoFile, BaseID)
  • 'on redimmensionne le buffer
  • ReDim D(6 + 14 * Exe.IcoDir.idCount)
  • 'on copie les données dans le buffer
  • CopyMemory ByVal VarPtr(D(0)), ByVal VarPtr(Exe.IcoDir), 6
  • 'pour chaque icone
  • For X = 0 To Exe.IcoDir.idCount - 1
  • 'on copie les données
  • CopyMemory ByVal VarPtr(D(6 + 14 * X)), ByVal VarPtr(Exe.Entries(X).bWidth), 14&
  • Next
  • 'on met à jour la ressource groupe icone
  • ret = UpdateResource(hWrite, RT_GROUP_ICON, GroupID, LangID, ByVal VarPtr(D(0)), UBound(D))
  • 'si échec, on quitte
  • If ret = 0 Then ReplaceIcoInExe = False: EndUpdateResource hWrite, 1: Exit Function
  • 'on met à jour chaque ressource icone
  • For X = 0 To Exe.IcoDir.idCount - 1
  • ret = UpdateResource(hWrite, RT_ICON, Exe.Entries(X).dwIconID, LangID, ByVal VarPtr(IcoFile.IcoData(X).Data(0)), Exe.Entries(X).dwBytesInRes)
  • Next
  • 'on enregsitre dans le fichier executable
  • ret = EndUpdateResource(hWrite, 0)
  • 'si échec, on quitte
  • If ret = 0 Then ReplaceIcoInExe = False: Exit Function
  • 'sinon succès
  • ReplaceIcoInExe = True
  • End Function
Option Explicit

'entete d'un fichier icone
Public Type ICONDIR
    idReserved As Integer   ' Reserved (must be 0)
    idType As Integer       ' Resource Type (1 for icons)
    idCount As Integer      ' How many images?
    'ICONDIRENTRY   idEntries[1]; // An entry for each image (idCount of 'em)
End Type

'décrit chaque icone du fichier
Public Type ICONDIRENTRY
    bWidth As Byte          ' Width, in pixels, of the image
    bHeight As Byte         ' Height, in pixels, of the image
    bColorCount As Byte     ' Number of colors in image (0 if >=8bpp)
    bReserved As Byte       ' Reserved ( must be 0)
    wPlanes As Integer      ' Color Planes
    wBitCount As Integer    ' Bits per pixel
    dwBytesInRes As Long    ' How many bytes in this resource?
    dwImageOffset As Long   ' Where in the file is this image?
End Type

'entete de ressource groupe d'icone
Public Type GRPICONDIR
    idReserved As Integer   ' Reserved (must be 0)
    idType As Integer       ' Resource Type (1 for icons)
    idCount As Integer      ' How many images?
    'ICONDIRENTRY   idEntries[1]; // An entry for each image (idCount of 'em)
End Type

'décrit chaque ressource icone
Public Type GRPICONDIRENTRY
    bWidth As Byte          ' Width, in pixels, of the image
    bHeight As Byte         ' Height, in pixels, of the image
    bColorCount As Byte     ' Number of colors in image (0 if >=8bpp)
    bReserved As Byte       ' Reserved ( must be 0)
    wPlanes As Integer      ' Color Planes
    wBitCount As Integer    ' Bits per pixel
    dwBytesInRes As Long    ' How many bytes in this resource?
    dwIconID As Integer   ' Where in the file is this image?
End Type
'fichier de donnée
Public Type Dat
    ' des données
    Data() As Byte
End Type

'un fichier icone
Public Type Ico
    IcoDir As ICONDIR 'entete
    Entries() As ICONDIRENTRY 'decrit chaque icone
    IcoData() As Dat 'données
End Type

'une ressoure de groupe d'icones
Public Type IcoExe
    'décrit le groupe d'icones
    IcoDir As GRPICONDIR
    'décrit l'icone
    Entries() As GRPICONDIRENTRY
End Type

'obtient un  handle de modification de ressource
Private Declare Function BeginUpdateResource Lib "kernel32.dll" Alias "BeginUpdateResourceA" (ByVal pFileName As String, ByVal bDeleteExistingResources As Long) As Long
'met à jour des infos de ressource
Private Declare Function UpdateResource Lib "kernel32.dll" Alias "UpdateResourceA" (ByVal hUpdate As Long, ByVal lpType As Long, ByVal lpName As Long, ByVal wLanguage As Long, lpData As Any, ByVal cbData As Long) As Long
'enregistre des infos de ressource dans le fichier
Private Declare Function EndUpdateResource Lib "kernel32.dll" Alias "EndUpdateResourceA" (ByVal hUpdate As Long, ByVal fDiscard As Long) As Long
'copie une zone mémoire dans une autre
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

'ressource icone
'type Resource Icone
Private Const RT_ICON As Long = 3&
Private Const DIFFERENCE As Long = 11
'type groupe d'icones
Private Const RT_GROUP_ICON As Long = (RT_ICON + DIFFERENCE)

'ouvrir un fichier icone
'========================
'FileName : nom du fichier icone
'renvoie le contenu formatté du fichier icone
Public Function OpenIconFile(FileName As String) As Ico
Dim t As Ico 'structure temporaire
Dim X As Long 'compteur

'on ouvre le fichier
Open FileName For Binary As #1
    'on récupère l'entete du fichier
    Get #1, , t.IcoDir
    
    'redimensionne au nombre d'icones
    ReDim t.Entries(0 To t.IcoDir.idCount - 1)
    ReDim t.IcoData(0 To t.IcoDir.idCount - 1)
    
    'pour chaque icones
    For X = 0 To t.IcoDir.idCount - 1
        'récupère l'entete de l'icone
        Get #1, 6 + 16 * X + 1, t.Entries(X)
        'redimensionne à la taille des données
        ReDim t.IcoData(X).Data(t.Entries(X).dwBytesInRes - 1)
        'récupère les données
        Get #1, t.Entries(X).dwImageOffset + 1, t.IcoData(X).Data
    Next
'ferme le fichier
Close #1
'renvoie les données
OpenIconFile = t
End Function

'transforme un fichier icone en ressource icone et groupe d'icones
'=============================================
'IcoFile : structure formattée du fichier icone
'IDBase : ID de base des icones
'renvoie une structure ressource icone
Private Function MakeIcoExe(IconFile As Ico, IDBase As Long) As IcoExe
Dim t As IcoExe 'structure temporaire
Dim X As Long 'compteur

'nombre d'icones
t.IcoDir.idCount = IconFile.IcoDir.idCount
'type : Icone = 1
t.IcoDir.idType = 1
'chaque entrée
ReDim t.Entries(IconFile.IcoDir.idCount - 1)

'pour chaque entrée
For X = 0 To t.IcoDir.idCount - 1
    'entete d'icones
    t.Entries(X).bColorCount = IconFile.Entries(X).bColorCount
    t.Entries(X).bHeight = IconFile.Entries(X).bHeight
    t.Entries(X).bReserved = IconFile.Entries(X).bReserved
    t.Entries(X).bWidth = IconFile.Entries(X).bWidth
    t.Entries(X).dwBytesInRes = IconFile.Entries(X).dwBytesInRes
    t.Entries(X).dwIconID = X + IDBase
    t.Entries(X).wBitCount = IconFile.Entries(X).wBitCount
    t.Entries(X).wPlanes = IconFile.Entries(X).wPlanes
Next
'renvoie la structure
MakeIcoExe = t
End Function

'remplace l'icone du fichier
'===============================
'FileName : nom du fichier executable
'IcoFile : nom du fichier icone
'BaseID : ID de base de l'icone
'GroupID : ID du groupe d'icones
'LangID : ID de la langue de l'icone
Public Function ReplaceIcoInExe(FileName As String, IcoFile As Ico, BaseID As Long, GroupID As Long, LangID As Long) As Boolean
Dim hWrite As Long 'handle de modification
Dim Exe As IcoExe 'structure de ressource icone
Dim ret As Long 'valeur de retour
Dim X As Long 'compteur
Dim D() As Byte 'buffer

'obtient un handle de modification
hWrite = BeginUpdateResource(FileName, 0)

'si échec, on quitte
If hWrite = 0 Then ReplaceIcoInExe = False: Exit Function

'sinon, on lit l'icone
Exe = MakeIcoExe(IcoFile, BaseID)

'on redimmensionne le buffer
ReDim D(6 + 14 * Exe.IcoDir.idCount)
'on copie les données dans le buffer
CopyMemory ByVal VarPtr(D(0)), ByVal VarPtr(Exe.IcoDir), 6

'pour chaque icone
For X = 0 To Exe.IcoDir.idCount - 1
    'on copie les données
    CopyMemory ByVal VarPtr(D(6 + 14 * X)), ByVal VarPtr(Exe.Entries(X).bWidth), 14&
Next

'on met à jour la ressource groupe icone
ret = UpdateResource(hWrite, RT_GROUP_ICON, GroupID, LangID, ByVal VarPtr(D(0)), UBound(D))

'si échec, on quitte
If ret = 0 Then ReplaceIcoInExe = False: EndUpdateResource hWrite, 1: Exit Function

'on met à jour chaque ressource icone
For X = 0 To Exe.IcoDir.idCount - 1
    ret = UpdateResource(hWrite, RT_ICON, Exe.Entries(X).dwIconID, LangID, ByVal VarPtr(IcoFile.IcoData(X).Data(0)), Exe.Entries(X).dwBytesInRes)
Next

'on enregsitre dans le fichier executable
ret = EndUpdateResource(hWrite, 0)
'si échec, on quitte
If ret = 0 Then ReplaceIcoInExe = False: Exit Function

'sinon succès
ReplaceIcoInExe = True
End Function

 Conclusion

Testé sous XP

N'hésitez pas à commenter et à noter...

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source .NET (Dotnet) CLONE/FORK DES FLUX DE LA CONSOLE : PERMETTRE LA REDIRECTION...
Source avec Zip Source .NET (Dotnet) DÉFRAGMENTER UN FICHIER
Source avec Zip Source .NET (Dotnet) ECRAN DE VEILLE : DÉTECTER LE LANCEMENT/DÉCLENCHER/EMPÊCHER
Source avec Zip Source .NET (Dotnet) AUTORUN : DÉTECTION DU LANCEMENT DE L'AUTORUN, DÉTECTION DU ...
Source avec Zip Source .NET (Dotnet) NSLOOKUP EN VB.NET OU COMMENT FAIRE UNE REQÛETE DNS EN PRÉCI...

 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) MODIFIER LES EXTENSION DES FICHIERS par okosa
ROUTINE DIR RÉCURSIVE POUR OBTENIR LA LISTE DE TOUS LES FICH... par kerisolde
Source avec Zip Source avec une capture FILE,SECURITY,FICHIER par okosa
Source avec Zip Source avec une capture Source .NET (Dotnet) PATCHEUR DE FICHIER par tototh
Source avec Zip Source avec une capture LECTURE DES INFORMATIONS DES DISQUES COMPOSANT UN ENSEMBLE R... par jack

Commentaires et avis

Commentaire de DARKSIDIOUS le 11/12/2004 20:51:12 administrateur CS

Très intéressant cette source, je sens que je vais pouvoir m'en servir pour mon éditeur d'icône. Pourrais-je ?

DarK Sidious

Commentaire de EBArtSoft le 11/12/2004 21:46:01 administrateur CS

Marche seulement sur platforme NT

@+

Commentaire de ShareVB le 12/12/2004 16:41:42

salut

si on veut utiliser cette source sur 9x, il faut utiliser par exemple le code suivant dans une dll C/C++ : http://www.codeguru.com/Cpp/misc/misc/article.php/c3909

tout le monde peut se servir de ma source...avec une petite référence à ma source quand même :)...

ShareVB

Commentaire de DARKSIDIOUS le 12/12/2004 17:15:30 administrateur CS

Oh t'en fait pas pour cà, si je me sert de ta source pour faire une option de mon éditeur d'icône, je te citerais, il n'y a pas de problème ;)

Merci beaucoup pour cette source instructive.

DarK Sidious

Commentaire de sam013 le 12/12/2004 18:44:13

Nikel 10/10

Commentaire de NBhack le 11/02/2005 14:16:06

merci

Commentaire de SuperPit37 le 01/06/2005 17:24:37

Je vais surement passer pour un con mais comment je fait pour trouver:  une langue d'icone, une ID de groupe (numérique), une ID d'icone (numérique),???

Commentaire de andrebernard le 11/10/2010 21:04:45

Oui pareil pour moi, car j'ai essayé 1 1 1 et ça plante l'exe :-(

Commentaire de ShareVB le 30/12/2010 11:12:33

bonjour à tous,

Les langues d'icônes sont les LCID de Windows (par ex 1036 pour le fr-FR, 1033 pour en-US) dont on peut trouver la liste à http://msdn.microsoft.com/en-us/goglobal/bb964664.

Pour les ID de groupe et d'icône, ce sont ceux utilisés dans l'exe cible: on peut les voir avec un outil tel que ResHack.

ShareVB

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,905 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales