【问题标题】:How to get the running application of the windows not all process如何获取windows正在运行的应用程序不是所有进程
【发布时间】:2017-03-08 08:33:28
【问题描述】:

这是代码

Process[] process = Process.GetProcesses();

Console.WriteLine("System Running Process \n\n");

foreach (Process Proc in process)
{
    if (!string.IsNullOrEmpty(Proc.MainWindowTitle))
    {
        IntPtr wHnd = Proc.MainWindowHandle;

        Console.WriteLine("Process Name {0} : status {1}", Proc.ProcessName, !IsIconic(wHnd));
        //ShowWindowAsync(wHnd, SW_RESTORE);


        //SetForegroundWindow(wHnd);
        Console.WriteLine("--------------------");
        //  Console.WriteLine(Proc.ProcessName);
    }
}

Red Mark 应用程序未使用但在后台进程中运行并显示的代码输出

这实际上是我想要的输出

【问题讨论】:

标签: c# .net-4.0


【解决方案1】:

您可以使用Proc.MainModule.FileVersionInfo.ProductName 代替Proc.ProcessName

Console.WriteLine("Process Name {0} : status {1}",
                  Proc.MainModule.FileVersionInfo.ProductName, 
                  !IsIconic(wHnd));

编辑:顺便说一句,如果需要标题,也可以使用Proc.MainWindowTitle

【讨论】:

  • 无法保证文件版本信息中的内容与 Windows 标题栏或任务管理器中显示的内容相匹配
  • MickyD 你看到我用线程附加的屏幕截图了吗?在代码下面?在此先感谢我想要所需的输出,并且您的代码行给出了不同名称的相同结果
【解决方案2】:

如果你只想找到那些有窗口的进程,你应该检查Process.MainWindowHandle以确保它不是IntPtr.Zero

foreach (Process Proc in process.Where(p => p.MainWindowHandle != IntPtr.Zero))
{
    ...

【讨论】:

    猜你喜欢
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-28
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多