Windows 搜索 SDK 提供了一个互操作性程序集,使你能够与 Windows 搜索和其他程序提供的组件对象模型 (COM) 对象进行交互,通过托管代码针对接口和类进行操作。 互作性程序集由Microsoft进行数字签名,可通过 Windows 搜索示例找到。
本主题按如下所示进行组织:
使用 Windows API CodePack
如果在 Microsoft .NET 环境中工作,请使用 适用于 Microsoft .NET Framework 的 Windows API 代码包 来获取搜索结果,或只浏览命名空间。 适用于 Microsoft .NET Framework 的 Windows API 代码包提供了一组 Shell 项,这些项本质上是本机 IShellItem 接口的包装器。 可以循环访问此集合并获取各种属性值,类似于从对象链接和嵌入数据库 (OLE DB) 查询枚举表中的结果的方式。
以下代码片段演示了如何循环访问搜索项并获取每个项的属性值。
foreach (ShellObject so in KnownFolders.SavedSearches)
{
searchFolder = new ShellSearchFolder(finalSearchCondition, (ShellContainer)so);
List<ShellObject> items = new List<ShellObject>();
foreach (ShellObject so2 in searchFolder) items.Add(so2);
}
访问索引结果
可以通过 OLE DB 或 Shell 数据模型访问索引结果。 这两种方法都有优点和缺点。 一个优点是,数据库程序员熟悉 OLE DB 和结构化查询语言(SQL)。 其他优点包括在仅查询索引器时对性能进行更好的控制,以及访问额外的功能,例如能够快速在新的行集里定位之前的结果。
Shell 数据模型的优点是它跨不同的信息源(如 OpenSearch)抽象化,并提供对其他功能(如缩略图和属性处理程序)的访问权限。 Shell 对象模型也不要求对非文件名结果(如邮件项和 OneNote 结果)以及驻留在用户索引中的任何项目提供特殊情况支持。 请注意,Shell KNOWNFOLDERID 是本地索引内容的已知文件夹范围。 有关创建 Shell 数据源的详细信息,请参阅 “实现基本文件夹对象接口”。
OpenSearch 数据源不会通过 OLE DB 公开,以便在 Windows 7 及更高版本中进行联合搜索。 出于此原因,我们建议考虑为 Shell 命名空间编写 LINQ 提供程序,而不是使用 OLE DB 访问索引器结果。 有关详细信息,请参阅 演练:创建 IQueryable LINQ 提供程序。
使用 Windows API 代码包的示例应用程序
以下屏幕截图显示了使用 适用于 Microsoft .NET Framework 的 Windows API 代码包创建的示例应用程序的模拟。
相关主题
-
概念
-
其他资源