2014-11-23 158 views
2

我想获得所有类型为“应用程序”(而不是“后台进程”或“Windows进程” “)。如何获得进程“类型”(应用程序,后台进程或Windows进程)

"App" type

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

var processList = Process.GetProcesses(); 

会得到我的系统上运行的所有进程的列表,我在为如何让“类型的损失'的过程。 'Process'确实有一个'GetType'方法,但它似乎并没有提到我所指的“类型”,并且TaskManager引用了上图中的内容。

有没有人知道我可以如何获得这个值,任务管理器将“type”引用到给定进程的变量中?

注意:C#。

+1

我不确定Windows 8任务管理器用于分类进程的逻辑。你可能要问雷蒙德。 :)但我怀疑它正在查看过程是否至少有一个UI窗口。你不会从'Process'类中得到这些,但是你可以将存在的窗口信息和拥有它们的过程相关联。 – 2014-11-23 08:20:55

+1

也许这个类型承载进程的MainWindowHandle属性;不确定正确使用'Refresh' [方法](http://stackoverflow.com/a/16185802/3439404)。在任何情况下:只有当进程具有图形界面时,进程才具有与其关联的主窗口,否则“MainWindowHandle”值为零。 – JosefZ 2014-11-23 20:15:00

回答

0

我找不到确切的答案,但我发现什么可以帮助我。您需要使用类别的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)。