如何检查正在运行的进程是不是是后台进程? [关闭]
Posted
技术标签:
【中文标题】如何检查正在运行的进程是不是是后台进程? [关闭]【英文标题】:How do I check if a running process is a background process? [closed]如何检查正在运行的进程是否是后台进程? [关闭] 【发布时间】:2016-06-19 05:03:45 【问题描述】:我目前正在获取我所有计算机正在运行的进程
Process[] plist = Process.GetProcesses();
有什么好方法可以检查列表中哪些进程作为后台进程运行?
“后台进程”是指用户不可见的进程。我尝试使用 WindowHandler 来检查它的位置,但这并没有完全做到,因为 Windows 中的进程可以在后台运行,并将 WindowHandler 设置为正整数。
【问题讨论】:
你认为什么是后台进程?和任务管理器下的列表一样吗? 在“后台”运行的进程,无需用户输入且屏幕上没有窗口。所以,是的,一个当前正在运行但不可见的进程。 “屏幕上没有窗口”所以,最小化计数? 不,最小化的窗口仍在 Windows 前台运行。我想我可以说“没有窗户”。 :) 守护进程和服务是两个很好的例子。 【参考方案1】:检查窗口样式似乎可以解决问题:
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。
【讨论】:
是的,你是not only allowed but encouraged 来回答你自己的问题! (我已经从你的回答中删除了那句话。) 啊,很高兴知道!谢谢你:) 要编写与 32 位和 64 位版本的 Windows 兼容的代码,请使用 GetWindowLongPtr 而不是 GetWindowLong。以上是关于如何检查正在运行的进程是不是是后台进程? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章