Per Как диспетчер задач классифицирует процессы как приложение, фоновый процесс или процесс Windows? в MSDN:
Если у процесса есть видимое окно, тоДиспетчер задач называет его «Приложение» .
Если процесс помечен как критический, диспетчер задач называет его «Процесс Windows».
В противном случае диспетчер задач называет его«Фоновый процесс».
Итак, учитывая идентификатор процесса, вы можете проверить, есть ли у него видимые окна, вызвав EnumWindows()
, где функция обратного вызова вызывает GetWindowThreadProcessId()
, чтобы проверить, принадлежит ли каждое окнок процессу, и IsWindowVisible()
, чтобы проверить, видно ли каждое окно.
Например:
struct myFindInfo
{
DWORD processID;
bool found;
};
static BOOL CALLBACK findVisibleWindowProc(HWND hwnd, LPARAM lParam)
{
myFindInfo *fi = reinterpret_cast<myFindInfo*>(lParam);
DWORD pid;
GetWindowThreadProcessId(hwnd, &pid);
if ((pid == fi->processID) && IsWindowVisible(hwnd))
{
fi->found = true;
return FALSE;
}
return TRUE;
}
bool isApplicationProcess(DWORD processID)
{
findInfo fi;
fi.processID = processID;
fi.found = false;
EnumWindows(&findVisibleWindowProc, reinterpret_cast<LPARAM>(&fi));
return fi.found;
}