如何重新使用现有/已打开的Windows资源pipe理器窗口来启动资源pipe理器

我有一个经常使用启动explorer.exe的应用程序。 我想重新使用现有/已经打开的资源pipe理器窗口,而不是每次启动过程时都创build一个新窗口。

这是我的代码看起来像:

System.Diagnostics.ProcessStartInfo info = new System.Diagnostics.ProcessStartInfo { UseShellExecute = true, FileName = "Explorer.exe", Arguments = myDirectoryPath }; System.Diagnostics.Process.Start(info); 

我没有看到一个命令行开关来做到这一点。 我尝试的一种方法是简单地杀死任何一个现有的浏览器进程,并将其replace为新的进程:

  var processes = System.Diagnostics.Process.GetProcesses(Environment.MachineName);int kills = 0; for (int i = 0; i < processes.Length; i++) { System.Diagnostics.Process p = processes[i]; if (p.ProcessName == "explorer" && kills < 1) ++kills p.Kill(); } 

但是这会造成不必要的影响,不仅仅是杀死一个进程,而是彻底杀死资源pipe理器,甚至是任务栏也会消失。

那么,如何使用现有的资源pipe理器窗口(如果存在)来启动资源pipe理器?

Solutions Collecting From Web of "如何重新使用现有/已打开的Windows资源pipe理器窗口来启动资源pipe理器"

IShellWindows COM接口将给你一个打开的资源管理器窗口列表,你可以获取并设置任何资源管理器窗口的地址,查看这个博客条目的C ++示例。 我怀疑.NET有一个本地的实现,所以你可能需要PInvoke

另一个选择是(如果你不知道你已经打开/想要重用的资源管理器窗口的HWND)枚举并找到一个标题为“看起来像”你想要的窗口,然后指示窗口来前景。 它不会透露你想要的确切文件,但它可能比其他选项更简单:)