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

标签 c# windows process windows-explorer

我有一个经常使用启动 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/

相关文章:

c# - 如何使用 C# 将 2 字节 C 日期转换为 .NET DateTime?

c++ - 为什么我的文件/目录操作在 Windows 上可以正常工作,但在 Linux 上却不行?

java - 批处理 - 如何等待具有特定名称的进程开始和完成?

Java杀死弹出进程

c# - 存储父子关系

c# - 错误 9 无法加载 Bootstrap 。设备连接组件

c# - 在生产数据库上部署应用程序时无法加载文件或程序集“System.Data”错误

windows - 是否有任何资源可以成为 Cygwin "power user"?

c++ - GDI+:灰度 PNG 加载为 PixelFormat32bppARGB

Python 退出处理程序