先用SHGetFileInfo获得系统的图标列表,将起装入一个ImageList,再用SHGetFileInfo获得该文件类型的图标索引。从ImageList中获得指定的图标即可。
在C++Builder中的代码如下:
第一步
    THandle ImageList;
    SHFILEINFO * FileInfo=new SHFILEINFO();
    ImageList=SHGetFileInfo("C:\\",0,FileInfo,sizeof(SHFILEINFO),SHGFI_SYSICONINDEX  and  SHGFI_SMALLICON);
    SendMessage(lstvwFiles->Handle,LVM_SETIMAGELIST,LVSIL_SMALL,ImageList);
    ImageList=SHGetFileInfo("C:\\",0,FileInfo,sizeof(SHFILEINFO),SHGFI_SYSICONINDEX  and  SHGFI_LARGEICON);
    SendMessage(lstvwFiles->Handle,LVM_SETIMAGELIST,LVSIL_NORMAL,ImageList);
    delete FileInfo;
第二步
            int IconFlag=SHGFI_SYSICONINDEX and SHGFI_LARGEICON ;
            SHFILEINFO * FileInfo=new SHFILEINFO();
            SHGetFileInfo(FileName ,0,FileInfo,sizeof(SHFILEINFO),IconFlag);
FileInfo->iIcon所表示的既是图标索引值。
详情可以参见MSDN的帮助。

解决方案 »

  1.   


    HIMAGELIST GetSmallSysImgList(CString filename)
    {
    SHFILEINFO shFinfo;

    HIMAGELIST hImgList = (HIMAGELIST)SHGetFileInfo(filename,
       0,
       &shFinfo,
       sizeof( shFinfo ),
       SHGFI_SYSICONINDEX |
       SHGFI_SMALLICON );
    if (!hImgList)
    return FALSE; return hImgList;   // OK
    }int GetSmallFileIcon(CString file)
    {
    SHFILEINFO shFinfo; if ( !SHGetFileInfo(file,
    0,
    &shFinfo,
    sizeof( shFinfo ),
    SHGFI_ICON | 
        SHGFI_SMALLICON ) )
    return 0; return shFinfo.iIcon;
    }