给定Windows Vista或更新版本IShellItem,如何获取与该项目关联的系统映像列表图标索引?
例如(伪代码):
IShellItem networkFolder = SHGetKnownFolderItem(FOLDERID_NetworkFolder, 0, 0, IShellItem);
Int32 iconIndex = GetSmallSysIconIndex(networkFolder);
Int32 GetSmallSysIconIndex(IShellItem item)
{
//TODO: Ask Stackoverflow
}
Run Code Online (Sandbox Code Playgroud)
在过去的日子里(Windows 95和更新版本),我们可以要求shell为项目的图标提供系统图像列表索引.我们用它做了SHGetFileInfo.SHGetFileInfo函数通过向shell命名空间询问系统imagelist中的图标索引来获取图标:
HICON GetIconIndex(PCTSTR pszFile)
{
SHFILEINFO sfi;
HIMAGELIST himl = SHGetFileInfo(pszFile, 0, &sfi, sizeof(sfi), SHGFI_SYSICONINDEX));
if (himl) {
return sfi.iIcon;
} else {
return -1;
}
}
Run Code Online (Sandbox Code Playgroud)
当您在shell命名空间中使用与文件对应的项时,这可行.但是shell支持除文件系统中的文件和文件夹之外的东西.
来自IShellFolder的图标索引
获取有关shell命名空间中对象的信息的一般解决方案来自于使用您在shell命名空间中表示项的方式:
IShellFolder:物品所在的文件夹,以及PIDL:该文件夹中的东西的id从那里有办法获得系统图像列表索引:
Int32 GetIconIndex(IShellFolder folder, PITEMID_CHILD …Run Code Online (Sandbox Code Playgroud)