Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何重新使用现有/已打开的Windows资源管理器窗口来启动资源管理器_C#_Windows_Process_Windows Explorer - Fatal编程技术网

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

C# 如何重新使用现有/已打开的Windows资源管理器窗口来启动资源管理器,c#,windows,process,windows-explorer,C#,Windows,Process,Windows Explorer,我有一个经常使用启动explorer.exe的应用程序。我希望重新使用现有/已打开的资源管理器窗口,而不是每次启动流程时都创建一个新的资源管理器窗口 下面是我的代码的样子: System.Diagnostics.ProcessStartInfo info = new System.Diagnostics.ProcessStartInfo { UseShellExecute = true, FileName = "Explorer.exe", Arguments = myD

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

下面是我的代码的样子:

System.Diagnostics.ProcessStartInfo info = new System.Diagnostics.ProcessStartInfo
{
    UseShellExecute = true,
    FileName = "Explorer.exe",
    Arguments = myDirectoryPath
};
System.Diagnostics.Process.Start(info);
我没有看到一个开关可以这样做。我尝试的一种方法是简单地杀死任何一个现有的explorer进程,并用一个新进程替换它:

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();
}
var processes=System.Diagnostics.Process.getprocesss(Environment.MachineName);int=0;
for(int i=0;i
但这会导致不必要的后果,不仅杀死1个进程,而且完全杀死资源管理器,甚至任务栏也会消失


>,如果存在,那么如何使用现有的Explorer窗口来启动Explorer?

< P> COM接口将给您一个打开的Explorer窗口列表,您可以获取并设置任何浏览器窗口的地址,请参阅C++示例。我怀疑.NET是否有这方面的本机实现,因此您可能需要PInvoke

另一个选项是(如果您不知道已打开/要重用的资源管理器窗口的HWND)枚举并找到标题与您想要的“类似”的窗口,然后指示该窗口进入前台。它不会显示您想要的确切文件,但它可能比其他选项更简单:)

这太复杂了,所以不要这样做。试试这个-

taskkill /f /im explorer.exe`
如果需要启动备份,请按Ctrl+Shift+Esc,然后单击文件,然后创建新任务,然后键入cmd,[确保先选中“使用管理权限创建此任务!”,然后单击确定或按Enter,然后输入以下代码-

start explorer.exe

现在必须重新启动explorer.exe

如果您的用户由于其他原因打开了一个指向某个目录的资源管理器窗口,并且不希望从该目录中删除,会发生什么情况?你认为这种方法会让你的用户感到沮丧吗?这是一个合理的担忧,尽管如此,我的用户说他们只是说他们想重新使用任何现有的浏览器窗口,而不是让我的应用每次都打开新的副本。否则,我必须确定我的应用程序打开了哪些资源管理器窗口,并且只能重复使用这些窗口。另请参见我在C中实现的这一点。在这一点上,可能会有所帮助,我会看一看,尽管我正在寻找更多类似于“以下是如何做到这一点的代码片段…”的内容所以真的没有命令行选项来重用以前的windows?古怪的