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

时间:2016-03-05 11:12:55

标签: c# windows visual-studio

我目前正在使用

获取所有计算机的运行流程
Process[] plist = Process.GetProcesses();

有没有什么好方法可以检查列表中的哪些进程作为后台进程运行?

“后台进程”是指用户看不到的进程。我尝试使用WindowHandler来检查它的位置,但是由于Windows中的进程可以在后台运行并且WindowHandler设置为正整数,所以它没有完全执行。

1 个答案:

答案 0 :(得分: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。