【问题标题】:Title name to Process name in C#标题名称到 C# 中的进程名称
【发布时间】:2013-09-27 01:49:05
【问题描述】:

我想通过输入程序的标题来查找进程的名称。例如,如果我输入“Google Chrome”,我希望控制台打印“chrome”(进程名称在任务管理器中的外观)谢谢

【问题讨论】:

  • Process 对象有一个名为 MainWindowTitle 的属性,它很可能就是您所指的属性。 System.Diagnostics 命名空间是 Process 对象所在的位置。然后,您可以使用 Process.GetProcesses() 检索系统上运行的所有进程。然后您遍历此列表并查找具有与您正在查找的值匹配的窗口标题的列表,从循环中中断并输出 proc.ProcessName; foreach(Process.GetProcesses() 中的进程 proc){ if(proc.MainWindowTitle == "Google Chrome"){ console.WriteLine(proc.ProcessName);打破;}}
  • 你为什么不把它写成答案@JohnBartels?
  • 当然,任何允许多个实例的东西要么可能返回错误的实例,要么返回很多。

标签: c#


【解决方案1】:

Process 中没有类似任务管理器进程描述的属性,你可以使用FileVersionInfo 找到EXEFileDescription

var processes = Process.GetProcesses().ToList();

foreach (var p in processes)
{
    try
    {
        var description = FileVersionInfo.GetVersionInfo(p.MainModule.FileName).FileDescription;
        if (description == "Google Chrome")
        {
            Console.WriteLine(p.ProcessName);
            break;
        }

    }
    catch (Exception ex)
    {
        // You will get Access is denied exception for some processes when accesses `MainModule`
    }
}

注意:以管理员身份运行您的应用程序

【讨论】:

    【解决方案2】:

    Process 对象有一个名为 MainWindowTitle 的属性,它很可能就是您所指的属性。 System.Diagnostics 命名空间是 Process 对象所在的位置。然后,您可以使用 Process.GetProcesses() 检索系统上运行的所有进程。然后您遍历此列表并查找具有与您正在查找的值匹配的窗口标题的列表,从循环中中断并输出 proc.ProcessName;

    foreach(Process proc in Process.GetProcesses())
    { 
         if(proc.MainWindowTitle == "Google Chrome")
         { 
            Console.WriteLine(proc.ProcessName); 
            break;
         }
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-12
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多