一个有关Shell接口的问题,好久没搞定,请教高手。
我想用Shell来枚举所有文件夹中的内容,即是将资源管理器中的所有文件夹对象列举出来。我的方法是这样的:
第一步:SHGetDesktopFolder(&psfDeskTop)来获取桌面顶层文件夹的标志符;
第二步:psfDeskTop->EnumObjects(NULL,SHCONTF_FOLDERS,&ppenum);
do{ hr=ppenum->Next(1,&pidlItems,&celtFetched);//枚举桌面下第一层所有
//文件夹
if (celtFetched)
{ 第三步:
//用BindToObject获得下一层pidlItems对象的IShellFolder接口指针
hr=psfDeskTop->BindToObject(pidlItems,NULL,IID_IShellFolder,
(void**)&UseFolder);
hr=UseFolder->EnumObjects(NULL,SHCONTF_FOLDERS,&ppenum2);
do { hr=ppenum2->Next(1,&pidlItems,&celtFetched);
if (celtFetched2)
{//如果需要再将pidlItems传递给BindToObject以获得下一层的
//IShellFolder接口
}
} while (celtFetched2!=0);
}
} while (celtFetched!=0);
我想问每次将Next(1,&pidlItems,&celtFetched)得到的pidlItems指针传递下去给psfDeskTop->BindToObject()会不会得到正确的IShellFolder指针,我的最终目的是枚举所有文件夹中的对象,能将资源管理器中的所有文件夹对象列举出来。那位高手有没有这方面的例子。