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

Ili*_*hev 5 c# windows explorer search

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

如何在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"));    
Run Code Online (Sandbox Code Playgroud)

简单吧?不适合我,我是一个非常新手的程序员,提前感谢任何帮助:)

Jac*_*cob 5

不幸的是,这似乎并不需要Windows API代码包来满足.该库完全是关于获取shell概念并将它们引入托管代码.在API级别,它在技术上独立于"真正的"Windows shell,因此可以使用与实际COM shell API不同的数据提供程序来实现它.考虑到这个目标,"返回"本机shell的能力很难,因为可能没有本地shell可以回到(当然假设说话;我不知道有人做出替代实现) .在这方面,库似乎将自己视为框架类库的扩展(这可能是有效的,因为一些特性 - 例如JumpList- 最终使它成为核心库).

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

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

对于您启动搜索窗口的特定问题,我建议您查看搜索:协议,看看它是否符合您的需求.它没有一个很好的对象模型来表示查询,所以你必须自己创建一个(或者找一个,它可能存在)或者只使用字符串.但它非常灵活.

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

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));
Run Code Online (Sandbox Code Playgroud)