在API函数遍历文件时,欲做一个类似资源管理器的程序,如何得到文件和文件夹相对应的图标,请用API函数写明.如果有图标存放的路径也好.(不够加分)

解决方案 »

  1.   

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

  2.   

    AresChen(AresChen) :万份感谢.
      

  3.   

    请问AresChen(AresChen) :szDisplayName As String * MAX_PATH 中的 MAX_PATH 值是多少???
      

  4.   

    MAX_PATH可以从API浏览器中找这个常量
    Public Const MAX_PATH = 260
      

  5.   

    谢谢,我在MSDN中找到.原来可以在API浏览器中找到
      

  6.   

    API浏览器所能提供的API、常数和结构比较有限,更多的时候应该注意去参考MSDN,但MSDN中存在一个问题就是很多常数的值没有,这时候可以使用VC的搜索功能在他的头文件目录中去搜索这个常数,你就可以找到这个常数的值。
      

  7.   

    请问AresChen(AresChen): SHGetFileInfo 函数还可以做其他什么功能????
      

  8.   

    记不清了,给你的程序是很久以前写的了。但印象当中应该是获取文件的相关信息,比如类型、图标等等。你可以仔细差一下MSDN,看看那上面是怎么说的。