4

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.

Ritterbruder
  • 53
  • 1
  • 3
  • Wild guess but perhaps a background application does not have a Window Handle or a Main Window Title? – Nico Sep 26 '16 at 16:52

3 Answers3

10

The property System.Diagnostics.Process.MainWindowHandle is zero when process has not UI (i.e. is background process).

TcKs
  • 25,849
  • 11
  • 66
  • 104
  • _"The value is also zero for processes that have been hidden, that is, processes that are not visible in the taskbar. This can be the case for processes that appear as icons in the notification area, at the far right of the taskbar."_ – stuartd Sep 26 '16 at 16:56
  • @startd The task manager theese applications marks as "Background processes". – TcKs Sep 26 '16 at 16:59
  • @stuartd: That's right. The services are available through ServiceController.GetServices() - https://msdn.microsoft.com/en-us/library/hde9d63a(v=vs.110).aspx – TcKs Sep 26 '16 at 17:20
3

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
    }
}
123iamking
  • 2,387
  • 4
  • 36
  • 56
0

Services are also usually created by SYSTEM user - the column "User Name" in task manager.

devdimi
  • 2,432
  • 19
  • 18