5

使用 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"));    

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

4

2 回答 2

6

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

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

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

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

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

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));
于 2013-04-01T04:21:21.327 回答
3
  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));
    }
于 2016-04-25T11:58:38.207 回答