比如:IShellFolder 当前是"我的电脑"
我用IShellFolder::EnumObjects得到了 LPITEMIDLIST 
再调用  SHGetFileInfo((LPCTSTR) LPITEMIDLIST , ,,,SHGFI_PIDL | SHGFI_SYSICONINDEX |  SHGFI_ICON );
 得到的图标索引全是错的。
但是如果说IShellFolder 是别的路径(桌面,我的文档)的时候,就没有错。

解决方案 »

  1.   

    只用过SHGFI_SMALLICON或SHGFI_LARGEICON,没用SHGFI_ICON作为参数过
    看起来没有什么错误
      

  2.   

    试试先用
    HRESULT SHGetSpecialFolderLocation(
        HWND hwndOwner,
        int nFolder,
        LPITEMIDLIST *ppidl
    );
    nFolder赋值CSIDL_DRIVES,将LPITEMIDLIST *ppidl用于下面DWORD_PTR SHGetFileInfo(
        LPCTSTR pszPath,
        DWORD dwFileAttributes,
        SHFILEINFO *psfi,
        UINT cbFileInfo,
        UINT uFlags
    );
    它的第三个参数
    typedef struct _SHFILEINFO{ 
        HICON hIcon; 
        int   iIcon; 
        DWORD dwAttributes; 
        TCHAR szDisplayName[MAX_PATH]; 
        TCHAR szTypeName[80]; 
    } SHFILEINFO; 
    中有HICON,这个是图标句柄,可以使用看看,应该是我的电脑的图标
      

  3.   

    试试
    SHGetFileInfo((LPCTSTR) LPITEMIDLIST ,0,FileInfo,SizeOf(FileInfo),
                    SHGFI_ICON | SHGFI_LARGEICON);
      

  4.   

    “我的电脑”属于虚似文件夹,SHGetFileInfo()不能获得虚似文件夹的信息,你可以从注册表中获得“我的电脑”图标:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\explorer\ShellIcons
      

  5.   

    上边是一般文件夹的图标
    象“我的电脑”这种系统固定图标在HKEY_CLASSES_ROOT\CLSID下:
    “我的电脑”
    HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\DefaultIcon
      

  6.   

    bug
    当前路径的bug,不光是我的电脑
    读驱动器类型也错