Программно определить статус приложения с учетом processid - PullRequest
0 голосов
/ 29 ноября 2018

Я использую Enumprocesses (lpidProcess, cb, lpcbNeeded) для определения запущенных ProcessIds.Как установить в этот список только «Приложения», те процессы, которые отображаются на вкладке Приложения диспетчера задач?

Заранее спасибо.

1 Ответ

0 голосов
/ 30 ноября 2018

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...