关联数组
关联数组是用于存储有关项类型的信息的注册表位置的有序列表,包括处理程序、谓词和其他属性,如该类型的图标和显示名称。 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对象的关联数组:
- AssocCreate(在 Windows Vista 之前)
- AssocCreateForClasses
- AssocQueryString
使用特定 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
- 动词
其他常见关联数组包括文件夹和打印机。
其他资源
- 若要创建 Shell 数据存储,请参阅 实现基本文件夹对象接口。
相关主题