比如:IShellFolder 当前是"我的电脑"
我用IShellFolder::EnumObjects得到了 LPITEMIDLIST
再调用 SHGetFileInfo((LPCTSTR) LPITEMIDLIST , ,,,SHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_ICON );
得到的图标索引全是错的。
但是如果说IShellFolder 是别的路径(桌面,我的文档)的时候,就没有错。
我用IShellFolder::EnumObjects得到了 LPITEMIDLIST
再调用 SHGetFileInfo((LPCTSTR) LPITEMIDLIST , ,,,SHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_ICON );
得到的图标索引全是错的。
但是如果说IShellFolder 是别的路径(桌面,我的文档)的时候,就没有错。
看起来没有什么错误
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,这个是图标句柄,可以使用看看,应该是我的电脑的图标
SHGetFileInfo((LPCTSTR) LPITEMIDLIST ,0,FileInfo,SizeOf(FileInfo),
SHGFI_ICON | SHGFI_LARGEICON);
象“我的电脑”这种系统固定图标在HKEY_CLASSES_ROOT\CLSID下:
“我的电脑”
HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\DefaultIcon
当前路径的bug,不光是我的电脑
读驱动器类型也错