根据具体的文件,然后找出它在系统里的关联图标,然提取它,(可以加载在IMAGELIST中)
接下来如何使它在LISTVIEW中配合相应的文件显示呢?我试了一种方法总是会把vb终止
Private Sub TV_NodeClick(ByVal Node As MSComctlLib.Node)Dim iml As ListImageOn Error Resume Next
LV.ListItems.Clear
conn.Provider = "Microsoft.Jet.OLEDB.4.0"
conn.Open "xxx.mdb", "admin", ""
'rs.ActiveConnection = conn
rs.Open "sql", conn, 1, 3
rs.MoveFirst
Do While Not rs.EOF
    Dim mIcon As Long
    'Extract the associated icon
    mIcon = ExtractAssociatedIcon(App.hInstance, rs.Fields(3), 2)
    'Draw the icon on the form
    Set iml = ImageList1.ListImages.Add(, , IconToPicture(mIcon))
    DestroyIcon (mIcon)
   
   LV.ListItems.Add , "k" & Str(rs.Fields(0)), rs.Fields(3), iml.Index
   
   rs.MoveNext
Loop
rs.Close
conn.CloseEnd SubPrivate Function IconToPicture(ByVal hIcon As Long) As IPicture
    
    If hIcon = 0 Then Exit Function
        
    ' This is all magic if you ask me:
    Dim NewPic As Picture, PicConv As PictDesc, IGuid As Guid
    
    PicConv.cbSizeofStruct = Len(PicConv)
    PicConv.picType = vbPicTypeIcon
    PicConv.hImage = hIcon
    
    'IGuid.Data1 = &H20400
    'IGuid.Data4(0) = &HC0
    'IGuid.Data4(7) = &H46
    
    ' Fill in magic IPicture GUID {7BF80980-BF32-101A-8BBB-00AA00300CAB}
    With IGuid
        .Data1 = &H7BF80980
        .Data2 = &HBF32
        .Data3 = &H101A
        .Data4(0) = &H8B
        .Data4(1) = &HBB
        .Data4(2) = &H0
        .Data4(3) = &HAA
        .Data4(4) = &H0
        .Data4(5) = &H30
        .Data4(6) = &HC
        .Data4(7) = &HAB
    End With
    OleCreatePictureIndirect PicConv, IGuid, True, NewPic
    
    Set IconToPicture = NewPic
    
End Function
谢谢高手赐教

解决方案 »

  1.   

    源码不全!API是怎么声明的呀!OleCreatePictureIndirect各参数你声明成什么类型,Byval or Byref?都不明,怎么分析!不过
    ExtractAssociatedIcon(App.hInstance, rs.Fields(3), 2)
    这句明显有问题,rs.Fields(3)真接传给API,习惯极其不好,也少见!这个参数要预分配缓冲区的,不然有可能被Kill的。
      

  2.   

    [email protected]  是你的邮件吗? 
    我给[email protected]发了个邮件 带附件的 里面的程序写得很清楚了如果还有问题 这个是我的e-mail 
    [email protected]
      

  3.   

    to lxcc:
    Private Function vbAddFileItemIcon(hImgSmall&) As Long    Dim r As Long
          
        pixSmall.Picture = LoadPicture()'这里怎么解释,我运行到这里就跳掉了
        
        r& = ImageList_Draw(hImgSmall&, shinfo.iIcon, pixSmall.hdc, 0, 0, ILD_TRANSPARENT)
        pixSmall.Picture = pixSmall.Image
        
        vbAddFileItemIcon& = hImgSmall&
       '以上几行什么意思,pixsmall是什么对象?怎么没有定义   
    End Function
    Private Function InitializeImageList() As Boolean    On Local Error GoTo InitializeError
              
          Set LV.SmallIcons = Nothing
          ImageList1.ListImages.Clear
          ImageList1.ListImages.Add , "dummy", pixDummy.Picture
          Set LV.SmallIcons = ImageList1
          
          InitializeImageList = True
          
        Exit Function
        
    InitializeError:
        
          InitializeImageList = False
      
    End Function
      

  4.   

    pikachu8guan谢谢你的好意,你给我的代码里有错误说不能创建activex对象,不过我可以研究一下
      

  5.   

    其实我的目的是这样的
    我先把某个盘的文件目录等做了个镜像,取得了每个文件的一些属性放在数据库中,现在我要根据数据库内的文件数据来判断文件在当前系统中的图标是什么,并将图标提出来放在imagelist中显示
    因此以上的方法都不行,他们都是当场根据文件的属性来判断的,而且那些代码实在超出我的能力,我看了都快疯了,希望高手帮忙