我有一个经常使用启动explorer.exe的应用程序。我想重新使用现有的/已经打开的资源管理器窗口,而不是每次启动过程时都创建一个新窗口。
以下是我的代码:
System.Diagnostics.ProcessStartInfo info = new System.Diagnostics.ProcessStartInfo
{
UseShellExecute = true,
FileName = "Explorer.exe",
Arguments = myDirectoryPath
};
System.Diagnostics.Process.Start(info);
我没有看到command-line开关执行此操作。我尝试过的一种方法是简单地杀死任何一个现有的资源管理器进程并用一个新进程替换它:
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个进程,还可以完全杀死资源管理器,即使任务栏也会消失。
那么,如何使用现有的资源管理器窗口(如果存在)来启动资源管理器?
答案 0 :(得分:1)
IShellWindows COM接口将为您提供一个打开的资源管理器窗口列表,您可以获取并设置任何资源管理器窗口的地址,有关C ++示例,请参阅this blog entry。我怀疑.NET有一个本机实现,所以你可能需要PInvoke
答案 1 :(得分:0)
另一种选择是(如果您不知道已经打开/想要重用的资源管理器窗口的HWND)枚举并找到标题为“看起来像”你想要的标题的窗口,然后指示该窗口来到前台。它不会显示您想要的确切文件,但它可能比其他选项更简单:)
答案 2 :(得分:0)
这太复杂了,所以不要那样做。试试这个吧-
taskkill /f /im explorer.exe`
如果您需要启动它,请按Ctrl + Shift + Esc,然后依次单击“文件”,“创建新任务”,键入 cmd ,[确保使用管理权限创建此任务首先检查!],然后单击“确定”或按Enter,然后输入以下代码-
start explorer.exe
现在 explorer.exe 必须重新启动!