我知道您可以使用Process[] processes = Process.GetProcesses();
或Process[] processes = Process.GetProcessesByName("processName");
但是我需要获取正在运行的当前应用程序,而不是特定的进程。原因是因为有时会在后台运行与某个应用程序相关的进程,但实际应用程序本身并未运行。但就我的目的而言,我需要知道实际的应用程序本身是否正在运行。
有没有办法在C#中执行此操作?
编辑:显然我还没有说清楚。例如,在任务管理器中,您可以看到当前正在运行的应用程序列表,以及当前正在运行的进程列表。我正在尝试获取可以在任务管理器中看到的应用程序列表,而不是广泛的进程列表
答案 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();