簡體   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