0

在我的桌面上,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;
}
4

1 回答 1

1

进程可能没有窗口标题。如果我执行这个:

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到进程列表中,以查看每个应用程序报告的标题。

于 2018-07-26T12:13:10.500 回答