如何检查正在运行的进程是否是后台进程?

我目前正在使用我所有的电脑正在运行的进程

Process[] plist = Process.GetProcesses(); 

有什么好方法来检查列表中的哪些进程正在作为后台进程运行?

对于“后台进程”,我的意思是一个对用户不可见的进程。 我试图使用WindowHandler来检查它的位置,但是这并没有这样做,因为Windows中的进程可以在WindowHandler设置为正整数的背景下运行。

Solutions Collecting From Web of "如何检查正在运行的进程是否是后台进程?"

这似乎是检查窗口风格做的窍门:

 public static bool hasWindowStyle(Process p) { IntPtr hnd = p.MainWindowHandle; UInt32 WS_DISABLED = 0x8000000; int GWL_STYLE = -16; bool visible = false; if (hnd != IntPtr.Zero) { UInt32 style = GetWindowLong(hnd, GWL_STYLE); visible = ((style & WS_DISABLED) != WS_DISABLED); } return visible; } 

这将返回true,如果:

  • 该过程没有用于用户输入的窗口样式

我已经做了一些测试,至少现在至少这似乎过滤了幕后运行的流程相当不错。

我想这只能在Windows上工作。