如题所示。
我用ImageList设置的图标一直都不满意,
请问如何实现图标为系统关联(默认)文件的图标?

解决方案 »

  1.   

    这很容易,得到与文件关联的程序图标,然后把这个图标提取出来加入你的ImageList中就可以实现了~代码我就懒的写了~按照我的思路你慢慢自己琢磨吧~首先要得到那个关联的主程序~再提取这个程序中的图标~加入你的ImageList最后显示在你的 ListView 中~Game Over~
    Good Luck~
      

  2.   

    呵呵,按照上面的思路给你一段程序吧,你自己理解了,在去按照你需求改吧。
    唉~~~最近一段时间老是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