使用 search-ms: 或 search: 协议将搜索结果作为 IShellItem 进行检索

Using search-ms: or search: protocols to retrieve search results as an IShellItem

本文关键字:IShellItem 检索 search-ms search 协议 使用 搜索结果      更新时间:2023-10-16

我正在尝试在Windows中检索全局文件搜索结果,但是Windows搜索文档非常复杂,我宁愿不处理SQL以获得如此简单的功能。在以IShellFolderIShellItem的形式运行search:query=%s后,是否可以在 Windows 资源管理器中获取搜索结果,以便我可以在应用程序中处理结果项?

如果要弹出一个额外的窗口,可以创建一个 Internet Explorer 窗口,导航到搜索 ms URL,从 IWebBrowser2 的 IServiceProvider 实现中查询 IShellBrowser 服务,然后获取活动的 shell 视图并枚举视图中的项。

如果不需要额外的窗口,可以使用 ISearchFolderItemFactory 并使用运算符COP_VALUE_CONTAINS设置条件 PKEY_FileName。你也可以使用 IConditionFactory2::CreateCompoundFromArray 来创建 compond 条件,在 SQL 术语中,它可以是这样的

其中文件名包含"ABC"或文件作者包含"ABC"或文件全文包含"ABC"

或文件标题包含"ABC"

然后,可以调用 ISearchFolderItemFactory::GetShellItem 来获取搜索文件夹对象的 IShellItem 接口,从中可以使用 BHID_EnumItems 调用 BindToHandler 以返回 shell 项枚举器。