关联数组

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

本主题的组织方式如下:

关于关联数组

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

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

在 Shell 查询一组预定义的注册表位置以获取有关 Shell 项的信息之后,它会按从最特定位置到最常规的位置的顺序将注册表位置放入数组中。

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

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

  • \ HKEY_CLASSES_ROOTjpgfile
  • \ HKEY_CLASSES_ROOTSystemFileAssociations\.jpg
  • \ HKEY_CLASSES_ROOT图像
  • HKEY_CLASSES_ROOT\*
  • \ HKEY_CLASSES_ROOTAllFilesystemObjects

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

查询关联数组

可以使用 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。

    Special progID 说明
    HKEY_CLASSES_ROOT\* ) (非文件夹的所有文件
    \ HKEY_CLASSES_ROOTAllFilesystemObjects 文件和文件系统文件夹
    \ HKEY_CLASSES_ROOT目录 文件系统文件夹
    \ HKEY_CLASSES_ROOT文件夹 Shell 容器

     

Shell 数据源关联数组

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

  • HKEY_CLASSES_ROOT\*
  • \ HKEY_CLASSES_ROOTAllFilesystemObjects
  • \ HKEY_CLASSES_ROOTKind.Document
  • \ HKEY_CLASSES_ROOT结果
  • \ HKEY_CLASSES_ROOTSystemFileAssociations\.docx
  • \ HKEY_CLASSES_ROOTWord。Document.12

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

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

其他常见的关联数组包括 Folder 和 Printer。

其他资源

应用程序注册

文件类型

文件关联的工作原理

按文件类型或类型显示的内容视图

文件类型验证程序

文件类型处理程序

编程标识符

感知类型