実行中のプロセスを列挙する方法【Windows API】

現在実行中のプロセスを列挙するプログラムです。タスクマネージャの「プロセス」タブで 表示されているものです。一見して使い道が無いように思われますが、プログラムが起動して いなかったら起動させる。といった処理を作成することができます。2つのプログラムを作成 して、お互いが終了していたら起動させる相互監視プログラムを作成しておけば、簡単には 終了させることができないプログラムを開発できます。

int main(int argc, char* argv[])
{
    DWORD allProc[1024];
    DWORD cbNeeded;
    int nProc;
    int i;

    // PID一覧を取得
    if (!EnumProcesses(allProc, sizeof(allProc), &cbNeeded)) {
        return 1;
    }

    nProc = cbNeeded / sizeof(DWORD);

    for (i = 0; i < nProc; i++) {
        TCHAR procName[MAX_PATH] = TEXT("<unknown>");

        HANDLE hProcess = OpenProcess(
            PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
            FALSE, allProc[i]);

        // プロセス名を取得
        if (NULL != hProcess) {
            HMODULE hMod;
            DWORD cbNeeded;

            if (EnumProcessModules(hProcess, &hMod, sizeof(hMod), &cbNeeded)) {
                GetModuleBaseName(hProcess, hMod, procName, 
                sizeof(procName)/sizeof(TCHAR));
            }
        }

        // プロセス名とPIDを表示
        printf(TEXT("%s  (PID: %u)\n"), procName, allProc[i]);
        CloseHandle(hProcess);
    }

    return 0;
}

 

Windows API

Posted by @erestage