Código: Seleccionar todo
Option Explicit
'**************************************************************
'**************************************************************
'** Module : mExtractIcons **
'** Author : Skyweb07 **
'** Email : [email protected] **
'** Date : 03/10/2009 - 15:20 **
'** Purpose : Extraer Iconos desde Archivos EXE o DLL **
'**************************************************************
'**************************************************************
'**************************************************************
'**************************************************************
'** APIS para dibujar los iconos **
'**************************************************************
'**************************************************************
Private Declare Function ExtractIconEx Lib "shell32.dll" Alias "ExtractIconExA" (ByVal lpszFile As String, ByVal nIconIndex As Long, phiconLarge As Long, phiconSmall As Long, ByVal nIcons As Long) As Long
Private Declare Function DrawIcon Lib "user32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal hIcon As Long) As Long
Private Declare Function DestroyIcon Lib "user32" (ByVal hIcon As Long) As Long
Public Function Extract_Icons(hFile As String, Listview As Listview, Picture As PictureBox, IL As ImageList)
Dim hCount As Long
Dim hIcon As Long
Dim i As Integer
Listview.ListItems.Clear ' // Limpiamos los Items de la Listview
Set Listview.Icons = Nothing ' // Quitamos las referencias de las imagelist de el Listview para que no de error
IL.ListImages.Clear ' // Limpiamos las imagenes de la Imagelist
Do ' // Hacemos un Loop por todos los iconos de el archivo
ExtractIconEx hFile, hCount, hIcon, 0, 1 ' // Extraemos el Icono y lo almacenamos en la variable hIcon
If hIcon = 0 Then Exit Do ' // Si retorna 0 es que no hay mas iconos entonces Salimos del bucle
With Picture
.Cls ' // Limpiamos la Picturebox
.AutoRedraw = True ' // Activamos el AutoRedraw
.BackColor = vbWhite ' // Le ponemos a la Imagen un color Blanco de fondo para que se vea bien en la Listview
DrawIcon .hdc, 0, 0, hIcon ' // Dibujamos el Icono
DestroyIcon hIcon ' // Destruimos el Icono para liberar el espacio utilizado en la memoria
With IL
.ListImages.Add , , Picture.Image ' // Anadimos el icono a la Imagelist
.ListImages(.ListImages.Count).Tag = .ListImages.Count & "-" & Right$(hFile, Len(hFile) - InStrRev(hFile, "\")) ' // Anadimos el tag de la Imagen el Nombre del Archivo
End With
hCount = hCount + 1 ' // Incrementamos la variable hCount
End With
Loop ' // Bucle
If IL.ListImages.Count > 0 Then ' // Si la Imagelist tiene Iconos
Set Listview.Icons = IL ' // Le asignamos a la Listview el Imagelist
For i = 1 To IL.ListImages.Count ' // Recorremos todos los iconos de la IMagelist
Listview.ListItems.Add , , IL.ListImages.Item(i).Tag, i ' // Anadimos el Icono a la Listview
Next i ' // Icono Siguiente
End If
End Function