On Windows 8.1 you go into the task manager and check the list of processes, there are two lists: - One for "Apps", which are visible foreground apps - One for "Background processes", which are processes running in the background
My end goal is to time how long it takes an application to load. When the application is still loading, it appears in "Background processes". However, once loaded, it appears in "Apps". This is going to be my criteria on what constitutes an app finishing loading.
I am using a System.Diagnostics.Process object to try to accomplish this. However, I am struggling to come up with a way to distinguish between a Process under "Background processes" and a Process under "Apps".
Does anyone have an idea on how to make this distinction? I looked through MSDN and tried different methods, none of which have been successful.
The property System.Diagnostics.Process.MainWindowHandle is zero when process has not UI (i.e. is background process).
Normally, if a process is an "App", it should have its own window's name, otherwise, it is a "Background application". Thus the code should be as follow:
Process[] arrProcess = Process.GetProcesses();
foreach (Process process in arrProcess)
{
if (!string.IsNullOrEmpty(process.MainWindowTitle))
{
//Do something with your App
}
else
{
//Do something with your Background process
}
}
Services are also usually created by SYSTEM user - the column "User Name" in task manager.
来源:https://stackoverflow.com/questions/39708184/net-how-to-check-if-a-windows-process-is-running-as-an-app-or-as-a-backgroun