2016-03-05 202 views
1

我目前我的所有计算机的运行进程与如何检查正在运行的进程是否是后台进程?

Process[] plist = Process.GetProcesses(); 

在那里检查哪些进程列表中正在运行的后台进程没有什么好的办法?

“后台进程”是指用户看不到的进程。我试图使用WindowHandler来检查它的位置,但是这并没有这么做,因为Windows中的进程可以在WindowHandler设置为正整数的背景下运行。

+2

你认为什么是后台进程?与任务管理器下的列表相同? – weston

+0

在没有用户输入且屏幕上没有窗口的情况下在“背景”中运行的进程。所以是的,一个当前正在运行但不可见的进程。 – midnightsyntax

+0

“屏幕上没有窗口”这样,最小化的计数? – weston

回答

3

好像检查窗口风格的伎俩:

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上工作。

+1

是的,你是[不仅允许但鼓励](http://stackoverflow.com/help/self-answer)回答你自己的问题! (我已经从你的答案中删除了这句话。) –

+0

很高兴知道!并且感谢你:) – midnightsyntax

+0

要编写与32位和64位版本的Windows兼容的代码,请使用GetWindowLongPtr代替GetWindowLong。 – vinsa

相关问题