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

本文关键字:运行 进程 是否 后台进程 何检查 检查 | 更新日期: 2023-09-27 18:37:25

我目前正在获取所有计算机正在运行的进程

Process[] plist = Process.GetProcesses();

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

对于"后台进程",我的意思是用户不可见的进程。我尝试使用窗口处理程序来检查它的位置,但这并没有完全做到,因为 Windows 中的进程可以在后台运行,并将 WindowHandler 设置为正整数。

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

似乎检查窗口样式可以解决问题:

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。