使用 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/