2013-03-31 77 views
4

使用Windows API代码包我在此处(使用C#)编写了此代码,使用Windows搜索。在Windows资源管理器中显示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"));  

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

回答

4

不幸的是,这似乎并不需要Windows API代码包的设计满足。这个库是关于将shell概念带入托管代码的。在API级别上,它在技术上独立于“真实”Windows外壳程序,因此它可以使用不同于实际COM外壳API的数据提供程序来实现。考虑到这个目标,“返回”到本地shell的能力很难,因为可能没有可返回的本地shell(当然假设我不知道任何人做出了替代实现) 。在这方面,图书馆似乎认为自己是框架类库的扩展(这可能是有效的,因为一些功能 - 如JumpList - 最终确实将其纳入核心库)。

请注意,我不能为图书馆的作者说话,上面的内容完全是基于库的结构和我与Microsoft其他.NET库的经验的猜测。但无论原因如何,这个功能似乎并不存在。

存在的是通过ExplorerBrowser控件(或其WPF包装器)创建自己的浏览器窗口的能力。请参阅该库附带的ExplorerBrowser示例以获取该示例。尽管如此,我不能说我建议试图模仿资源管理器,即使是这些帮助者。

对于您启动搜索窗口的特定问题,我建议您查看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)); 
+0

这真的真棒......单个文件。我怎样才能“强制”Windows Search使用搜索协议为我提供来自不同文件夹的特定文件?你能举个例子吗?谢谢。 –

2
public void getPDF() 
    { 
       string folder = Uri.EscapeDataString(@"C:\"); 
       string file = "*.pdf* size:> 2 MB"; 
       string uri = "search:query=" + file + "&crumb=location:" + folder; 
       Process.Start(new ProcessStartInfo(uri)); 
    } 
相关问题