Private mhLargeSysIL As Long 'Handle to System ImageList (Large Icons)
Private mhSmallSysIL As Long 'Handle to System ImageList (Small Icons)
Private Const MAX_PATH As Long = &H104& '260 - Max Path Len
Private Const GWL_STYLE As Long = &HFFFFFFF0 '(-16) - Get/Set Window Style
Private Const SHGFI_SYSICONINDEX As Long = &H4000& '16384 - Get System Icon Index
Private Const SHGFI_LARGEICON As Long = &H0& '0 - Get Large Icon
Private Const SHGFI_SMALLICON As Long = &H1& '1 - Get Small Icon
Private Const SHGFI_DISPLAYNAME As Long = &H200& '512 - Get File Display Name
Private Const SHGFI_TYPENAME As Long = &H400& '1024 - Get File Type Name
Private Const SHGFI_ICON As Long = &H100& '256 - Get icon
Private Const LVIF_IMAGE As Long = &H2& '2 - Setting the Image
Private Const LVM_SETIMAGELIST As Long = &H1003 '4099 - Set New Image List
Private Const LVM_SETITEM As Long = &H1006 '4102 - Set Image List Item
Private Const LVM_SETCOLUMNWIDTH As Long = &H101E& '4126 - Set ListView Column Width
Private Const LVS_SHAREIMAGELISTS As Long = &H40& '64 - Don't Destroy Assigned Image Lists
Private Const LVSIL_NORMAL As Long = &H0& '0 - Large Icon
Private Const LVSIL_SMALL As Long = &H1& '1 - Small Icon
Private Const LVSCW_AUTOSIZE As Long = &HFFFFFFFF '(-1) - Autosize ListView Column
Private Const LVSCW_AUTOSIZE_USEHEADER As Long = &HFFFFFFFE '(-2) - Autosize ListView Column to Header
Private Const INVALID_HANDLE_VALUE As Long = &HFFFFFFFF '(-1) - File not found
Private Const FILE_ATTRIBUTE_READONLY As Long = &H1& '1 - Read Only File
Private Const FILE_ATTRIBUTE_HIDDEN As Long = &H2& '2 - Hidden File
Private Const FILE_ATTRIBUTE_SYSTEM As Long = &H4& '4 - System File
Private Const FILE_ATTRIBUTE_DIRECTORY As Long = &H10& '16 - Folder
Private Const FILE_ATTRIBUTE_ARCHIVE As Long = &H20& '32 - Archive File
Private Type SHFILEINFO
hIcon As Long 'Icon handle
iIcon As Long 'Icon index
dwAttributes As Long 'SFGAO_flags
szDisplayName As String * MAX_PATH 'Display name (or path)
szTypeName As String * 80 'Type name
End Type
Private Type LV_ITEM
mask As Long
iItem As Long
iSubItem As Long
State As Long
stateMask As Long
pszText As String
cchTextMax As Long
iImage As Long
lParam As Long '(~ ItemData)
iIndent As Long
End Type
Private Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Private Type SYSTEMTIME
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMillisecs As Integer
End Type
Private Type WIN32_FIND_DATA
dwFileAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
nFileSizeLow As Long
dwReserved0 As Long
dwReserved1 As Long
cFileName As String * MAX_PATH
cAlternate As String * 14
End Type
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 Declare Function ImageList_GetImageCount Lib "comctl32.dll" (ByVal hIml As Long) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long
Private Declare Function FileTimeToLocalFileTime Lib "kernel32" (lpFileTime As FILETIME, lpLocalFileTime As FILETIME) As Long
Private Declare Function FileTimeToSystemTime Lib "kernel32" (lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME) As Long
Private Declare Function DestroyIcon Lib "user32" (ByVal hIcon As Long) As Long
Public Sub AssignSystemImageLists(ByVal sPath As String, lvwFiles As ListView)
'Retieve handles to the System ImageLists
'and assign them to the Listview.
Dim lIdx As Long
Dim lStyle As Long
Dim sfiFile As SHFILEINFO
'Get handles to system image lists.
'They may change, especially if the user changes display settings.
'Safest to obtain them each time...
mhLargeSysIL = SHGetFileInfo(sPath, 0&, sfiFile, Len(sfiFile), SHGFI_SYSICONINDEX Or SHGFI_LARGEICON)
mhSmallSysIL = SHGetFileInfo(sPath, 0&, sfiFile, Len(sfiFile), SHGFI_SYSICONINDEX Or SHGFI_SMALLICON)
'Make sure that the System ImageLists aren't destroyed when the ImageList is terminated
lStyle = GetWindowLong(lvwFiles.hWnd, GWL_STYLE)
Call SetWindowLong(lvwFiles.hWnd, GWL_STYLE, lStyle Or LVS_SHAREIMAGELISTS)