给你一段程序吧,你自己理解了,在去按照你需求改吧。 唉~~~最近一段时间老是Copy程序了~~~说句实话,这些东西MSDN里都有啊,建议大家自己先多琢磨琢磨,这样长进也快啊,否则,有问题就只能问别人啦~~~Public Enum SH_ICON_SIZE_ENUM SHGFI_LARGEICON = &H0 SHGFI_SMALLICON = &H1 End EnumPrivate Type SHFILEINFO hIcon As Long iIcon As Long dwAttributes As Long szDisplayName As String * MAX_PATH szTypeName As String * 80 End Type Private Type TypeIcon cbSize As Long picType As PictureTypeConstants hIcon As Long End Type Private Type CLSID id(16) As Byte End TypeConst SHGFI_ICON = &H100 Const SHGFI_TYPENAME = &H400Private 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 Function IconToPicture(hIcon As Long) As IPictureDisp Dim cls_id As CLSID Dim hRes As Long Dim new_icon As TypeIcon Dim lpUnk As IUnknown
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 IconToPicture = lpUnk End Function Public Function GetFileIcon(ByVal filename As String, ByVal icon_size As SH_ICON_SIZE_ENUM, Optional ByRef dwAttributes As Long, Optional ByRef iIcon As Long) As IPictureDisp Dim icon_pic As IPictureDisp Dim hIcon As Long Dim sh_info As SHFILEINFO
SHGetFileInfo filename, 0, sh_info, Len(sh_info), SHGFI_ICON + icon_size hIcon = sh_info.hIcon iIcon = sh_info.iIcon dwAttributes = sh_info.dwAttributes Set icon_pic = IconToPicture(hIcon) Set GetFileIcon = icon_pic End Function Public Function GetFileType(filename As String) As String Dim sh_info As SHFILEINFO
SHGetFileInfo filename, 0, sh_info, Len(sh_info), SHGFI_TYPENAME GetFileType = sh_info.szTypeName End Function
AresChen(AresChen) :万份感谢.
请问AresChen(AresChen) :szDisplayName As String * MAX_PATH 中的 MAX_PATH 值是多少???
MAX_PATH可以从API浏览器中找这个常量 Public Const MAX_PATH = 260
唉~~~最近一段时间老是Copy程序了~~~说句实话,这些东西MSDN里都有啊,建议大家自己先多琢磨琢磨,这样长进也快啊,否则,有问题就只能问别人啦~~~Public Enum SH_ICON_SIZE_ENUM
SHGFI_LARGEICON = &H0
SHGFI_SMALLICON = &H1
End EnumPrivate Type SHFILEINFO
hIcon As Long
iIcon As Long
dwAttributes As Long
szDisplayName As String * MAX_PATH
szTypeName As String * 80
End Type
Private Type TypeIcon
cbSize As Long
picType As PictureTypeConstants
hIcon As Long
End Type
Private Type CLSID
id(16) As Byte
End TypeConst SHGFI_ICON = &H100
Const SHGFI_TYPENAME = &H400Private 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 Function IconToPicture(hIcon As Long) As IPictureDisp
Dim cls_id As CLSID
Dim hRes As Long
Dim new_icon As TypeIcon
Dim lpUnk As IUnknown
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 IconToPicture = lpUnk
End Function
Public Function GetFileIcon(ByVal filename As String, ByVal icon_size As SH_ICON_SIZE_ENUM, Optional ByRef dwAttributes As Long, Optional ByRef iIcon As Long) As IPictureDisp
Dim icon_pic As IPictureDisp
Dim hIcon As Long
Dim sh_info As SHFILEINFO
SHGetFileInfo filename, 0, sh_info, Len(sh_info), SHGFI_ICON + icon_size
hIcon = sh_info.hIcon
iIcon = sh_info.iIcon
dwAttributes = sh_info.dwAttributes
Set icon_pic = IconToPicture(hIcon)
Set GetFileIcon = icon_pic
End Function
Public Function GetFileType(filename As String) As String
Dim sh_info As SHFILEINFO
SHGetFileInfo filename, 0, sh_info, Len(sh_info), SHGFI_TYPENAME
GetFileType = sh_info.szTypeName
End Function
Public Const MAX_PATH = 260