Extraction des icones d'un fichier .exe

Soyez le premier à donner votre avis sur cette source.

Snippet vu 11 918 fois - Téléchargée 18 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
26 avril 2012 à 09:19
Bonjour MiciM.
Je reviens au bout de deux ans :)

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

Merci
Utilisateur anonyme
22 août 2010 à 14:24
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.
Utilisateur anonyme
22 août 2010 à 14:16
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
16 août 2010 à 09:42
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 2
23 août 2008 à 13:01
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
Afficher les 10 commentaires

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.