繁体   English   中英

如何在C#中获取单个进程的多个实例详细信息?

[英]How to get multiple instance details of single process in c#?

在我的桌面上,triplE应用程序正在运行。 它的进程名称是“ Orig_sysdsner”。 这里创建单个进程,但是创建多个实例,每个实例标题将是唯一的。 现在,我想使用实例名称获取此过程的所有实例。 如何在C#中完成?

下面的功能我已经尝试过,但获取上次打开的实例详细信息。

public static List<string> GetDGDesignEditorRunningInstance()
{
    List<string> runningInstanceList = new List<string>();
    List<Process> processList = Process.GetProcessesByName("Orig_sysdsner").ToList();
    try
    {
        foreach (Process process in processList)
        {
            //string instanceName = process.MainModule.FileName;
            string instanceName = process.MainWindowTitle;
            runningInstanceList.Add(instanceName);
        }

    }
    catch (Exception ex)
    {
        throw ex;
    }
    return runningInstanceList;
}

进程可能没有窗口标题。 如果我执行此操作:

var runningInstanceList=Process.GetProcessesByName("Chrome")
                           .Select(proc=>proc.MainWindowTitle)
                           .ToList();

我将取回16个条目,只有其中一个具有MainWindowTitle。 Chrome使用不显示任何标题的标签和后台进程。

如果使用MicrosoftEdgeCP我将取回17个字符串,所有字符串均具有相同的标题Microsoft Edge

顺便说一句,您不需要调用.ToList()即可遍历GetProcessByName返回的数组。 foreach可在实现IEnumerableIEnumerable<T> 您可以使用LINQ选择所需的项目,这样就可以摆脱循环并将标题逐一添加到结果列表中,例如:

var runningInstanceList=Process.GetProcessesByName("Chrome")
                           .Select(proc=>new { proc.Id,
                                               proc.ProcessName,
                                               proc.MainWindowTitle
                                             })
                           .ToList();

将返回唯一的进程ID,名称和窗口标题(如果存在)。

您可以使用Process Explorer并将Window Title添加到进程列表中,以查看每个应用程序报告的标题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM