相关疑难解决方法(0)

如何获取IShellItem的系统映像列表图标索引?

给定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:物品所在的文件夹,以及
  • childPIDL:该文件夹中的东西的id

从那里有办法获得系统图像列表索引:

Int32 GetIconIndex(IShellFolder folder, PITEMID_CHILD …
Run Code Online (Sandbox Code Playgroud)

windows com shell winapi

8
推荐指数
1
解决办法
874
查看次数

标签 统计

com ×1

shell ×1

winapi ×1

windows ×1