我有一个经常使用启动 explorer.exe 的应用程序。我想重新使用现有/已经打开的资源管理器窗口,而不是每次启动该过程时都创建一个新窗口。
这是我的代码:
System.Diagnostics.ProcessStartInfo info = new System.Diagnostics.ProcessStartInfo
{
UseShellExecute = true,
FileName = "Explorer.exe",
Arguments = myDirectoryPath
};
System.Diagnostics.Process.Start(info);
我没有看到 command-line切换到做到这一点。我尝试的一种方法是简单地杀死任何 1 个现有的资源管理器进程并用一个新进程替换它:
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();
}
但这会产生不良影响,不仅会杀死 1 个进程,还会完全杀死资源管理器,甚至任务栏也会消失。
那么,如何使用现有的资源管理器窗口(如果存在)启动资源管理器?
最佳答案
IShellWindows COM 接口(interface)会给你一个打开的资源管理器窗口列表,你可以获取和设置任何资源管理器窗口的地址,参见 this blog entry对于 C++ 示例。我怀疑 .NET 对此有本地实现,因此您可能需要 PInvoke
关于c# - 如何重新使用现有/已经打开的 Windows 资源管理器窗口来启动资源管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4831101/