如何获取进程的“类型”(应用程序、后台进程或Windows进程)

4

我正在尝试获取所有类型为“app”的进程列表(而不是“后台进程”或“Windows进程”)。

“App”类型

不幸的是,虽然我知道...

var processList = Process.GetProcesses();

我可以得到系统上运行的所有进程列表,但我不知道如何获取进程的“类型”。 'Process'有一个名为'GetType'的方法,但它似乎与我所谈论的“类型”无关,并且任务管理器在上面的图片中引用了它。

有人知道我如何将任务管理器称为“类型”的值转换为给定进程的变量吗?

注:使用C#编写。


1
我不确定Windows 8任务管理器用于分类进程的逻辑。你可能需要问Raymond Chen。:)但我怀疑它是否正在查看进程是否至少有一个UI窗口。您无法从“Process”类中获取该信息,但可以将存在的窗口和拥有它们的进程的信息进行关联。 - Peter Duniho
1
也许这种类型与进程的 MainWindowHandle 属性有关;不确定如何正确使用 Refresh 方法。无论如何:只有当进程具有图形界面时,进程才有一个与之关联的主窗口,否则 MainWindowHandle 值为零。 - JosefZ
2个回答

6

我找不到确切的答案,但我找到了对我有帮助的内容。您需要使用Process类的MainWindowHandle属性。

var processes = Process.GetProcesses().Where(pr => pr.MainWindowHandle != IntPtr.Zero);

foreach (Process proc in processes)
    Console.WriteLine(proc.ProcessName);

警告

如果你尝试获取proc.MainModule.FileName,可能会出现Win32Exception异常。为了避免这个问题,我将我的项目编译为x64(你的项目 -> 属性 -> 构建 -> 平台目标 -> x64)。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接