将托管代码与 Shell 数据和 Windows 搜索一起使用

Windows 搜索 SDK 提供了一个互操作性程序集,使你能够使用组件对象模型 (COM) 由 Windows 搜索和其他程序针对使用托管代码的接口和类公开的对象。 互操作性程序集由 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 Codepack 的示例应用程序

以下屏幕截图显示了使用适用于 Microsoft .NET Framework的 Windows API 代码包创建的示例应用程序的模拟。

显示电子邮件的媒体播放器应用程序的屏幕截图

概念性

Windows 中的联合搜索

其他资源

跨语言互操作性