Σέ VB6 είχα χρειαστεί το ίδιο πράγμα και έφτιαξα το παραπάκτω module.
Πραγματοποιείται μέ την χρήση API
Private Type SHFILEINFO
hIcon As Long
iIcon As Long
dwAttributes As Long
szDisplayName As String * MAX_PATH
szTypeName As String * 80
End Type
Private Declare Function OleCreatePictureIndirect Lib "oleaut32.dll" (pDicDesc As TypeIcon, riid As CLSID, ByVal fown As Long, lpUnk As Object) As Long
Private Declare Function SHGetFileInfo Lib "shell32.dll" Alias "SHGetFileInfoA" (ByVal pszPath As String, ByVal dwFileAttributes As Long, psfi As SHFILEINFO, ByVal cbFileInfo As Long, ByVal uFlags As Long) As Long
Private Const SHGFI_ICON = &H100
Private Const SHGFI_LARGEICON = &H0
Private Const SHGFI_SMALLICON = &H1
'aFileName Διαδρομή του αρχείου π.χ.C:\Windows\Myapp.exe) ,imglist το imagelist που γεμίζει μέ την είκόνα που σχετίζεται το αρχείο
Public Sub SetIcon(ByVal aFileName As String, imglist As Object)
Dim fName As String
Dim Index As Integer
Dim hIcon As Long
Dim item_num As Long
Dim icon_pic As IPictureDisp
Dim sh_info As SHFILEINFO
Dim cls_id As CLSID
Dim hRes As Long
Dim new_icon As TypeIcon
Dim lpUnk As IUnknown
fName = Trim(aFileName)
If fName = "" Then
Exit Sub
End If
SHGetFileInfo fName, 0, sh_info, Len(sh_info), SHGFI_ICON + SHGFI_LARGEICON
hIcon = sh_info.hIcon
With new_icon
.cbSize = Len(new_icon)
.picType = vbPicTypeIcon
.hIcon = hIcon
End With
With cls_id
.id(8) = &HC0
.id(15) = &H46
End With
hRes = OleCreatePictureIndirect(new_icon, cls_id, 1, lpUnk)
If hRes = 0 Then Set icon_pic = lpUnk
On Error Resume Next
If Not icon_pic Is Nothing Then
imglist.ListImages.Add imglist.ListImages.Count + 1, aFileName, icon_pic
End If
End Sub
'Κλήση της ρουτίνας
Dim imgstr as string
Dim sListIstem As MSComctlLib.ListItem
imgstr="C:\myapp.exe"
SetIcon imgstr, ImageList1
set sListIstem =ListView1.ListItems.Add( , "blabla", "blabla", ImageList1.ListImages(imgstr).Index, ImageList1.ListImages(imgstr).Index)
οπότε καταλαβαίνεις ότι όλο αυτό μπορεί να μπεί σέ ένα loop που γεμίζει το imagelist σου καί να συσχετίζεται μέ το listview σου
Φαντάζομαι ότι εύκολα μπορείς να το περάσεις σέ VB2005
Ιωάννης Μανουσάκης