关联数组

关联数组是注册表位置的有序列表,用于存储有关项类型的信息,包括处理程序、谓词和其他属性,如该类型的图标和显示名称。 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\Unknown

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

  • 下表显示了特殊 ProgID。

    特殊 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 数据源关联数组 (表示搜索结果中的项和基于查询的视图) 如下所示:

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

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

其他资源

应用程序注册

文件类型

文件关联的工作原理

按文件类型或类型查看内容

文件类型验证程序

文件类型处理程序

编程标识符

感知类型