c# - 在 Windows 资源管理器中显示 Windows 搜索结果

标签 c# windows search explorer

使用 Windows API 代码包 我在此处(使用 C#)编写了此代码,使用 Windows 搜索。

如何在 Windows 资源管理器中显示此结果(应该显示的位置)?

// create the leaf condition for the file name
        SearchCondition fileNameCondition =
            SearchConditionFactory.CreateLeafCondition(
            SystemProperties.System.FileName, textBox2.Text, 
            SearchConditionOperation.Equal);

        // create the search folder
        ShellSearchFolder searchFolder = new ShellSearchFolder(fileNameCondition(ShellContainer)NonFileSystemKnownFolder.FromParsingName(@>"C:\Users\ILIANHOME\Downloads"));    

简单吧?不适合我,我是一个非常新手的程序员,在此先感谢您的帮助:)

最佳答案

不幸的是,这似乎不是 Windows API 代码包旨在满足的需求。该库是关于采用 shell 概念并将它们带入托管代码的。在 API 级别,它在技术上独立于“真正的”Windows shell,因此它可以使用与实际 COM shell API 不同的数据提供程序来实现。考虑到这个目标,“返回”到 native shell 的能力是困难的,因为可能没有可以返回到的 native shell(当然是假设性的;我不知道有没有人进行替代实现) .在这方面,该库似乎将自己视为框架类库的扩展(这可能是有效的,因为一些特性——比如 JumpList——最终确实进入了核心库)。

请注意,我不能代表库的作者,以上纯粹是基于库的结构和我对 Microsoft 其他 .NET 库的使用经验的推测。但不管是什么原因,这个功能似乎并不存在。

存在的是通过 ExplorerBrowser 控件(或它的 WPF 包装器)创建您自己的资源管理器窗口的能力。有关示例,请参阅库附带的 ExplorerBrowser 示例。不过,我不能说我建议尝试模仿 Explorer,即使有这些助手。

对于启动搜索窗口的特殊问题,我建议查看 search: protocol看看它是否满足您的需求。它没有一个很好的对象模型来表示查询,因此您必须自己创建一个(或找到一个,它可能存在)或者只使用字符串。但它非常灵活。

您的上述特定问题可以实现为:

string folder = Uri.EscapeDataString(@"C:\Users\ILIANHOME\Downloads");
string file = '"' + Uri.EscapeDataString(textBox2.Text) + '"';
string uri = "search:query=filename:" + file + "&crumb=location:" + folder;
Process.Start(new ProcessStartInfo(uri));

关于c# - 在 Windows 资源管理器中显示 Windows 搜索结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15734998/

相关文章:

c# - C++ 运算符等于 C#

c# - BackgroundWorker 奇怪的问题

c# - 密码学:为什么我会根据从哪个证书库加载证书而获得不同的 RSA 签名?

windows - Windows 上的 Git : How do you set up a mergetool?

php - 在word文档文件中搜索关键词

javascript - Linkedin People Search Javascript API 未返回任何结果

C# 将 ArrayList.IndexOf 与多个相同的项目一起使用

c++ - 我的 Windows 机器上的所有 QT 应用程序都有乱码 GUI

windows - 在 Windows 平台上从 Node.js 连接 DB2

c# - ElasticSearch NEST 搜索多种类型和所有字段