Public Enum IconSize
Large
Small
End Enum
Public Class FileSytemIcon
#Region " API "
Private Structure SHFILEINFO
Public hIcon As IntPtr ' : icon
Public iIcon As Integer ' : icondex
Public dwAttributes As Integer ' : SFGAO_ flags
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=260)> _
Public szDisplayName As String
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=80)> _
Public szTypeName As String
End Structure
Private Declare Auto Function SHGetFileInfo Lib "shell32.dll" _
(ByVal pszPath As String, _
ByVal dwFileAttributes As Integer, _
ByRef psfi As SHFILEINFO, _
ByVal cbFileInfo As Integer, _
ByVal uFlags As Integer) As IntPtr
Private Const SHGFI_ICON = &H100
Private Const SHGFI_SMALLICON = &H1
Private Const SHGFI_LARGEICON = &H0 ' Large icon
#End Region
#Region " Properties and Member Variables "
Private m_iSmall As Icon
Private m_iLarge As Icon
Public ReadOnly Property SmallIcon() As Icon
Get
Return m_iSmall
End Get
End Property
Public ReadOnly Property LargeIcon() As Icon
Get
Return m_iLarge
End Get
End Property
#End Region
#Region " Private Methods "
Private Sub RetriveIcons(ByVal strExtension As String)
Dim hImgSmall As IntPtr
Dim hImgLarge As IntPtr
Dim shinfo As New SHFILEINFO
shinfo.szDisplayName = New String(Chr(0), 260)
shinfo.szTypeName = New String(Chr(0), 80)
'SmallIcon
hImgSmall = SHGetFileInfo(strExtension, 0, shinfo, _
Marshal.SizeOf(shinfo), _
SHGFI_ICON Or SHGFI_SMALLICON)
m_iSmall = System.Drawing.Icon.FromHandle(shinfo.hIcon)
'LargeIcon
hImgLarge = SHGetFileInfo(strExtension, 0, shinfo, _
Marshal.SizeOf(shinfo), _
SHGFI_ICON Or SHGFI_LARGEICON)
m_iLarge = System.Drawing.Icon.FromHandle(shinfo.hIcon)
End Sub
#End Region
Public Sub New(ByVal Extension As String)
RetriveIcons(Extension)
End Sub
End Class