|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
AJOUTER OU MODIFIER UNE RESSOURCE ICONE DANS UN EXÉCUTABLE OU DLL...
Information sur la source
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
Pour les "Membres Club", vous pouvez 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
Sources de la même categorie
Commentaires et avis
|
Comparez les prix Nouvelle version

HTC G1
Entre 449€ et 449€
|