SHChangeUpdateImageIDList 结构 (shlobj_core.h)

[SHChangeUpdateImageIDList 可用于“要求”部分中指定的操作系统。 在后续版本中,它可能已更改或不可用。]

将用作 SHUpdateImage 参数的信息以模拟 ITEMIDLIST 的形式存储,以便 SHChangeNotify 可以使用它们。

语法

typedef struct _SHChangeUpdateImageIDList {
  USHORT cb;
  int    iIconIndex;
  int    iCurIndex;
  UINT   uFlags;
  DWORD  dwProcessID;
  WCHAR  szName[MAX_PATH];
  USHORT cbZero;
} SHChangeUpdateImageIDList, *LPSHChangeUpdateImageIDList;

成员

cb

类型: USHORT

结构大小(以字节为单位)。

iIconIndex

类型: int

szName 指定的文件中图标的从零开始的索引。 通过调用 IExtractIcon::GetIconLocation 并检索 piIndex 指向的值来获取此值。

iCurIndex

类型: int

正在更新的图标的系统映像列表中的从零开始的索引。

uFlags

类型: UINT

确定图标属性的标志。 通过调用 IExtractIcon::GetIconLocation 并检索 pwFlags 指向的值来获取此值。 这两个标志与 SHUpdateImage 相关。

GIL_NOTFILENAME

位置不是文件名/索引对。 调用决定从位置提取图标的应用程序必须调用此对象的 IExtractIcon::Extract 方法以获取所需的图标图像。

GIL_SIMULATEDOC

调用应用程序应使用指定的图标创建文档图标。

dwProcessID

szName[MAX_PATH]

类型: WCHAR[MAX_PATH]

以 null 结尾的 Unicode 字符串,指定包含图标的文件的完全限定路径。 通过调用 IExtractIcon::GetIconLocation 并检索 szIconFile 指向的值来获取此值。

cbZero

类型: USHORT

注解

此示例演示如何使用 SHChangeUpdateImageIDListSHChangeDWORDAsIDList by SHChangeNotify 来模拟 SHUpdateImage 函数。

void MyUpdateImage(LPCWSTR pszHashItem, int iIndex, UINT uFlags, int iImageIndex)
{
    SHChangeUpdateImageIDList rgPidl;
    SHChangeDWORDAsIDList rgDWord;
    int cchLen;
    USHORT *pcb;

    // Validate parameters: iImageIndex must be a valid system image list value.
    if (iImageIndex < 0)
    {
        return;
    }

    // Validate parameters: pszHashItem must not exceed MAX_PATH in length
    cchLen = lstrlenW(pszHashItem);
    if (cchLen >= MAX_PATH)
    {
        return;
    }

    // Load SHChangeUpdateImageIDList
    rgPidl.dwProcessID = GetCurrentProcessId();
    rgPidl.iIconIndex = iIndex;
    rgPidl.iCurIndex = iImageIndex;
    rgPidl.uFlags = uFlags;
    lstrcpynW(rgPidl.szName, pszHashItem, MAX_PATH);
    pcb = &rgPidl.szName[cchLen+1];
    
    // Set the size of the first element
    rgPidl.cb = (USHORT)((BYTE*)pcb - (BYTE*)rgPidl); 
    
    // Terminate the "ITEMIDLIST"
    *pcb = 0; 

    // Load SHChangeDWORDAsIDList
    rgDWord.cb = (USHORT)FIELD_OFFSET(SHChangeDWORDAsIDList, cbZero);
    rgDWord.dwItem1 = iImageIndex;
    rgDWord.dwItem2 = 0;
    rgDWord.cbZero = 0;

    // Parameters are now in the form that SHCNE_UPDATEIMAGE can accept
    SHChangeNotify(SHCNE_UPDATEIMAGE, SHCNF_IDLIST, &rgDWord, &rgPidl);
}

要求

要求
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
标头 shlobj_core.h (包括 Shlobj.h)

另请参阅

IExtractIcon::GetIconLocation

SHChangeDWORDAsIDList