如何把WINDOWS系统目录文件载入listview中。
并且显示文件的系统图标。

解决方案 »

  1.   

    用Dir函数查找目录下的文件,(具体的参阅MSDN关于Dir的解释)显示图标用一个API函数该函数声明为:
    Public Const MAX_PATH = 260
    Public Const SHGFI_DISPLAYNAME = &H200
    Public Const SHGFI_EXETYPE = &H2000
    Public Const SHGFI_SYSICONINDEX = &H4000  ' System icon index
    Public Const SHGFI_LARGEICON = &H0        ' Large icon
    Public Const SHGFI_SMALLICON = &H1        ' Small icon
    Public Const ILD_TRANSPARENT = &H1        ' Display transparent
    Public Const SHGFI_SHELLICONSIZE = &H4
    Public Const SHGFI_TYPENAME = &H400
    Public Const BASIC_SHGFI_FLAGS = SHGFI_TYPENAME _
       Or SHGFI_SHELLICONSIZE Or SHGFI_SYSICONINDEX _
       Or SHGFI_DISPLAYNAME Or SHGFI_EXETYPEPublic Type SHFILEINFO
        hIcon As Long
        iIcon As Long
        dwAttributes As Long
        szDisplayName As String * MAX_PATH
        szTypeName As String * 80
    End TypePublic Declare Function SHGetFileInfo Lib "shell32.dll" Alias "SHGetFileInfoA" _
       (ByVal pszPath As String, _
        ByVal dwFileAttributes As Long, _
        psfi As SHFILEINFO, _
        ByVal cbSizeFileInfo As Long, _
        ByVal uFlags As Long) As LongPublic Declare Function ImageList_Draw Lib "comctl32.dll" _
       (ByVal himl&, ByVal i&, ByVal hDCDest&, _
        ByVal x&, ByVal y&, ByVal flags&) As LongPublic shinfo As SHFILEINFO使用方法:(放置一个Listview及ImageList 还有二个PictureBox)
        Dim hImgSmall As Long     ' The handle to the system image list
        Dim FileName As String    ' The file name to get icon from
        Dim r As Long    FileName$ = txtFileName.Text
       
        ' Get the system icons associated with the file
        hImgSmall& = SHGetFileInfo(FileName$, 0&, shinfo, Len(shinfo), _
                     BASIC_SHGFI_FLAGS Or SHGFI_SMALLICON)    hImgLarge& = SHGetFileInfo(FileName$, 0&, shinfo, Len(shinfo), _
                     BASIC_SHGFI_FLAGS Or SHGFI_LARGEICON)
       
      
        ' Set the pictureboxes to receive the icons.
        picSmall.Picture = LoadPicture()    picLarge.Picture = LoadPicture()
       
        ' Draw the associated icons into the picture boxes
        r& = ImageList_Draw(hImgSmall&, shinfo.iIcon, picSmall.hDC, 0, 0, ILD_TRANSPARENT)
        r& = ImageList_Draw(hImgLarge&, shinfo.iIcon, picLarge.hDC, 0, 0, ILD_TRANSPARENT)
        
        ImageList1.ListImages.Add , , picLarge.Image
        
        ListView1.ListItems.Add , , ImageList1.ListImages.Count, ImageList1.ListImages.Count
        
      

  2.   

    MSDN中的例子
    Dim MyFile, MyPath, MyName' 返回“WIN.INI” (如果该文件存在)。
    MyFile = Dir("C:\WINDOWS\WIN.ini")   ' 返回带指定扩展名的文件名。如果超过一个 *.ini 文件存在,
    ' 函数将返回按条件第一个找到的文件名。
    MyFile = Dir("C:\WINDOWS\*.ini")' 若第二次调用 Dir 函数,但不带任何参数,则函数将返回同一目录下的下一个 *.ini 文件。
    MyFile = Dir' 返回找到的第一个隐式 *.TXT 文件。
    MyFile = Dir("*.TXT", vbHidden)' 显示 C:\ 目录下的名称。
    MyPath = "c:\"   ' 指定路径。
    MyName = Dir(MyPath, vbDirectory)   ' 找寻第一项。
    Do While MyName <> ""   ' 开始循环。
       ' 跳过当前的目录及上层目录。
       If MyName <> "." And MyName <> ".." Then
          ' 使用位比较来确定 MyName 代表一目录。
          If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then
             Debug.Print MyName   ' 如果它是一个目录,将其名称显示出来。
          End If
       End If
       MyName = Dir   ' 查找下一个目录。
    Loop
      

  3.   

    用fso读出来,然后add item到listview就可以了。
      

  4.   

    有個很好的例子,http://www.cndevx.com/club/dispbbs.asp?boardID=30&ID=38309貼在這裡面的