获取当前正在运行的应用程序列表,而不是进程c#

时间:2018-03-09 21:26:57

标签: c# process

我知道您可以使用Process[] processes = Process.GetProcesses();Process[] processes = Process.GetProcessesByName("processName");

获取正在运行的当前流程的列表

但是我需要获取正在运行的当前应用程序,而不是特定的进程。原因是因为有时会在后台运行与某个应用程序相关的进程,但实际应用程序本身并未运行。但就我的目的而言,我需要知道实际的应用程序本身是否正在运行。

有没有办法在C#中执行此操作?

编辑:显然我还没有说清楚。例如,在任务管理器中,您可以看到当前正在运行的应用程序列表,以及当前正在运行的进程列表。我正在尝试获取可以在任务管理器中看到的应用程序列表,而不是广泛的进程列表

2 个答案:

答案 0 :(得分:2)

获取进程列表,然后按具有MainWindowHandle的进程进行筛选。

  

只有当进程具有图形界面时,进程才有与其关联的主窗口。如果关联的进程没有主窗口,则MainWindowHandle值为零。对于已隐藏的进程(即,任务栏中不可见的进程),该值也为零。对于在任务栏最右侧的通知区域中显示为图标的进程,可能就是这种情况。

如果它有一个主窗口,就任务管理器而言,它就是一个“应用程序”。

 <script>
            $(".navbar-nav li").on("click", function(){
            $(".navbar-nav li").removeClass("active");
            $(this).addClass("active");
            });
        </script>

答案 1 :(得分:0)

艾米的答案是一个,但我不得不将其更改为

var running_apps = Process.GetProcesses()
                          .Where(p => (long)p.MainWindowHandle != 0)
                          .ToArray();