关联数组

关联数组是用于存储有关项类型的信息的注册表位置的有序列表,包括处理程序、谓词和其他属性,如该类型的图标和显示名称。 Shell 使用关联数组查询可能包含 Shell 项信息的预定义注册表位置集。

本主题按如下所示进行组织:

关于关联数组

关联数组是注册表位置的有序列表,其中包含有关项类型的信息,包括处理程序、谓词和其他属性,例如该类型的图标和显示名称。 可以在不同级别的特定级别注册有关项类型的此信息。 例如,可以注册仅针对特定文件类型(如 .jpg)或具有相同 System.Kind 的所有项(例如 System.kind = picture)或所有项显示谓词。

Shell 使用关联数组查询一组预定义的注册表位置,这些位置可能包含有关项的信息。 关联数组 API 可用于从注册表子项中检索包含所请求信息的单个值,该值来自提供它的数组中的第一个条目。 例如,以这种方式检索默认图标值。 关联数组还可用于检索存储在注册表子项中的一组值。 例如,动词列表是从所有子项下注册的谓词生成的。

Shell 查询预定义的注册表位置集以获取有关 Shell 项的信息后,它将注册表位置放入数组中,从最具体的位置到最常规的位置。

由于关联数组是有序列表,因此它们为应用程序开发人员提供了一种机制,用于将信息添加到将为特定类型的项返回的注册表。 同样,关联数组允许应用程序开发人员在更常规的位置注册这些项时,向注册表中添加特定项组的信息。 此逻辑会通知你决定注册表中最适合的位置,以存储有关 Shell 项的信息。

在默认 Windows 系统上,.jpg 文件具有以下关联数组:

  • HKEY_CLASSES_ROOT\jpgfile
  • HKEY_CLASSES_ROOT\SystemFileAssociations\.jpg
  • HKEY_CLASSES_ROOT\映像
  • HKEY_CLASSES_ROOT\*
  • HKEY_CLASSES_ROOT\AllFilesystemObjects

有关注册关联数组的信息,请参阅 应用程序注册

查询关联数组

有 Shell API 可从一系列注册表子项检索信息,从最具体的注册表子项到所有注册表子项中信息的超集。

关联数组的最常见用途是查询 Shell 从包含所请求信息的数组中最特定元素返回的单个值。 下面的代码示例演示如何执行此作。

IQueryAssociations *pqa;

// pShellItem is assumed to be an existing IShellItem object.
hr = pShellItem->BindToHandler(NULL, BHID_AssociationArray, IID_PPV_ARGS(&pqa));
if (SUCCEEDED(hr))
{
    wchar_t szValue[256];
    DWORD cbValue = sizeof(szValue);      // Count of bytes in the array

    hr = pqa->GetData(0, ASSOCDATA_VALUE, L"InfoTip", szValue, &cbValue);
    if (SUCCEEDED(hr))
    {
        // The "InfoTip" value is used to compute the infotip string from
        // properties of an item.
    }
    pqa->Release();
}

以下 API 可用于查询关联数组或构造可查询的 IQueryAssociations对象的关联数组

使用特定 Shell 数据源的关联数组

每个 Shell 数据源为其项定义关联数组。 定义关联数组通常是项类型的函数。 Shell 数据源实现者应定义和记录关联数组,使应用程序能够扩展这些类型的行为,例如注册谓词或其他信息。 应用程序可以根据向关联数组子项添加数据来扩展项的行为,例如为项添加谓词。

文件系统数据源基于以下注册表子项和特殊 ProgID 为文件生成关联数组:

  • 如果文件具有已注册的 ProgID,则使用 HKEY_CLASSES_ROOT\ProgID。 否则,将使用未知HKEY_CLASSES_ROOT\

  • 文件扩展名在 HKEY_CLASSES_ROOT\SystemFileAssociations\.fileExtension 子项下注册。

  • 下表显示了特殊 ProgID。

    特殊 progID 描述
    HKEY_CLASSES_ROOT\* 所有文件(非文件夹)
    HKEY_CLASSES_ROOT\AllFilesystemObjects 文件和文件夹文件夹
    HKEY_CLASSES_ROOT\Directory 文件系统文件夹
    HKEY_CLASSES_ROOT\文件夹 Shell 容器

     

Shell 数据源关联数组

以下列表表示可用于本主题中所述的一些 Shell 数据存储关联数组:

  • HKEY_CLASSES_ROOT\*
  • HKEY_CLASSES_ROOT\AllFilesystemObjects
  • HKEY_CLASSES_ROOT\Kind.Document
  • HKEY_CLASSES_ROOT\结果
  • HKEY_CLASSES_ROOT\SystemFileAssociations\.docx
  • HKEY_CLASSES_ROOT\Word.Document.12

可用于 DBFolder 的 Shell 数据源关联数组(表示搜索结果中的项的 Shell 数据存储和基于查询的视图)如下所示:

  • 驱动器
  • 网络
  • RegItems
  • 例子:
    • ContentView
    • 动词

其他常见关联数组包括文件夹和打印机。

其他资源

应用程序注册

文件类型

文件关联的工作原理

按文件类型或类型 内容视图

文件类型验证程序

文件类型处理程序

编程标识符

感知类型