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