Extraction des icones d'un fichier .exe

Soyez le premier à donner votre avis sur cette source.

Snippet vu 10 901 fois - Téléchargée 17 fois

Contenu du snippet

La code utilise l'api windows pour extraire les icones d'une executable (metadata).

On doit ajouter les composants suivants sur le formulaire
- un bouton pour effectuer l'operation nommee openbtn.
- un label pour afficher le nom de l'exe (nommee namelbl).
- un label pour afficher le nombre d'icones (nommee total).
- un composant ImageList pour sauvgarder les icones nommee img.

Source / Exemple :


Dim a As New OpenFileDialog

Declare Function ExtractIcon Lib "shell32.dll" Alias "ExtractIconA" (ByVal hInst As IntPtr, ByVal lpszExeFileName As String, ByVal nIconIndex As Integer) As IntPtr

Private Sub opebtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles opebtn.Click
   namelbl.Text = "File name : " & a.FileName
   a.Filter = "Win32 PE Files (*.Exe,*.Dll,*.Scr,*.cpl)|*.exe;*.dll;*.scr;*.cpl"
   If a.ShowDialog = Windows.Forms.DialogResult.OK Then
     Dim Handler As IntPtr
     'On passe -1 pour lire le nombre d'icones
     Handler = ExtractIcon(Me.Handle, a.FileName, -1)
     If Handler.ToInt32 = 0 Then
        MsgBox("Pas d'icones dans le fichier selectionne.....", MsgBoxStyle.Exclamation, "Error")
        Exit Sub
     End If
     total.Text = "Total icons : " & Handler.ToInt32
     img.Images.Clear()
     Dim i As Integer
     'On prend le nombre d'icones.
     i = Handler.ToInt32
     For i = 1 To i
       'La fonction retourne un  handle pour l'icone.
       'On lui passe: le handle de la fenetre, le nom de fichier et l'index de l'icone.
       Handler = ExtractIcon(Me.Handle, a.FileName, i - 1)
       img.Images.Add(i, System.Drawing.Icon.FromHandle(Handler))
     Next
   End If
End sub

A voir également

Ajouter un commentaire

Commentaires

cs_ABF
Messages postés
227
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
26 avril 2012
-
Bonjour MiciM.
Je reviens au bout de deux ans :)

Oui c'est une réécriture d'exe. Pas trouvé depuis le temps.

Merci
MicDundee
Messages postés
388
Date d'inscription
mardi 1 juillet 2003
Statut
Membre
Dernière intervention
18 novembre 2019
1 -
Pour ABF, c'est un projet à toi ou c'est un exécutable quelconque ?

Pour ton projet, clique sur la form (pas sur un objet de la form) pour la mettre en focus. Dans la liste des propriétés (à droite) regarde à "Icon" et clique dessus. Clique sur le bouton "..." pour rechercher l'icône que tu souhaites.

Pour l'autre cas, il faut réécrire l'exe en ayant changé la valeur adéquate.
MicDundee
Messages postés
388
Date d'inscription
mardi 1 juillet 2003
Statut
Membre
Dernière intervention
18 novembre 2019
1 -
Il n'y a pas plus simple en VB .net ?
Et ça ?
Dim ico As Icon = Icon.ExtractAssociatedIcon("C:\WINDOWS\system32\notepad.exe")
Me.Icon = ico

Ton script ne fonctionne que pour les "EXE" ou peut être "DLL". Ca ca marche même pour un fichier quelconque.
Dim ico As Icon = Icon.ExtractAssociatedIcon("C:\WINDOWS\WindowsUpdate.txt")
Me.Icon = ico
Tu verras l'icone du format TXT. ;)
cs_ABF
Messages postés
227
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
26 avril 2012
-
Bonjour,

Et pour le remplacment d'icone d'un exe comment faire ?

Merci
gillardg
Messages postés
3275
Date d'inscription
jeudi 3 avril 2008
Statut
Membre
Dernière intervention
14 septembre 2014
3 -
voila pour completer ton prog sans trop compliquer :)
Dim x As Integer = 1
For Each ico As Image In img.Images
x = x + 1
Application.DoEvents()
ico.Save(Application.StartupPath & "\icones de " & a.Filename & x & ".ico", System.Drawing.Imaging.ImageFormat.Icon)
Next

salutations

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.