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

use*_*093 4 c# windows types diagnostics process

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

“应用程序”类型

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

var processList = Process.GetProcesses();
Run Code Online (Sandbox Code Playgroud)

将为我提供系统上运行的所有进程的列表,我不知道如何获取进程的“类型”。“Process”确实有一个方法“GetType”,但它似乎并不指代我所指的“类型”,而 TaskManager 在上图中指的是“类型”。

有谁知道如何将任务管理器称为“类型”的值获取到给定进程的变量中?

注:C#。

Raz*_*tsk 6

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

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

foreach (Process proc in processes)
    Console.WriteLine(proc.ProcessName);
Run Code Online (Sandbox Code Playgroud)

警告

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