我正在尝试在Windows中检索全局文件搜索结果,但是Windows搜索文档非常复杂,我宁愿不处理SQL以获得如此简单的功能。在以IShellFolder
或IShellItem
的形式运行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 项枚举器。