如题:
代码如下:
void CgetfileinfoDlg::GetFileIconIndex()
{
CoInitialize(NULL);
// DWORD dwIndex;
DWORD_PTR dwRet;
LPCTSTR pszPath = "d:\\backup\\收藏夹";
SHFILEINFO fileInfo;
memset(&fileInfo,0,sizeof(fileInfo));
dwRet = ::SHGetFileInfo(pszPath,0,&fileInfo,sizeof(fileInfo),SHGFI_ICON|SHGFI_SYSICONINDEX);
if (dwRet == 0)
{
AfxMessageBox("获取文件夹信息失败",MB_OK);
return;
}
else
{
CString str;
str.Format("文件夹图标索引为:%d",fileInfo.iIcon);
AfxMessageBox(str,MB_OK);
}
DestroyIcon(fileInfo.hIcon);}
为什么每次调用 不同的图标的文件夹 fileInfo。iIcon总是返回4呢?帮忙看看^

解决方案 »

  1.   

    用用文件查找试试 CFileFind
      

  2.   


    就是在文件夹属性里  将文件夹图标改成别的图标  再执行函数的话
    应该是不一样的图标索引啊,只有在改成shell32.dll里的第一个未知文件的图标后索引才会变一下,不然全部返回4
    这个索引是不是对应图标在shell32.dll中的位置呢  如果是的话  改了图标索引就应该跟着变的啊
      

  3.   

    因为你不同的图标,没有在shell32.dll里面,当然获取不到了。把SHGFI_SYSICONINDEX去掉。SHGFI_SYSICONINDEX
    Retrieve the index of a system image list icon. If successful, the index is copied to the iIcon member of psfi. The return value is a handle to the system image list. Only those images whose indices are successfully copied to iIcon are valid. Attempting to access other images in the system image list will result in undefined behavior.注意最后一句,will result in undefined behavior
      

  4.   

    图标都是在shell32.dll中的,应为就是在文件夹属性中改的。 但是图标索引返回都是4,SHGFI_SYSICONINDEX去掉也没用啊