카테고리:

2 분 소요

문제 상황

C/C++로 프로그래밍을 하다 보면 C#에서 사용했던 수 많은 API들이 생각이 날 때가 많다.

프로세스 명 가져오기 같은 경우도, C#에서는

Process[] allProc = Process.GetProcesses();

이렇게 한 줄로 끝나지만, C/C++에서는 그런 거 없다…

구글링을 하던 중 좋은 예제를 찾아서 하나 소개하려 한다.

소스 코드

#pragma once
#pragma comment(lib, "Wtsapi32.lib")
#include <Windows.h>
#include <WtsApi32.h>
#include <vector>
#include <iostream>
#include <string>
#include <algorithm>

std::vector<std::string> ProcessName;

void GetAllProcess() {
    WTS_PROCESS_INFO* pWPIs = NULL;
    DWORD dwProcCount = 0;
    ProcessName.clear();
    if (WTSEnumerateProcesses(WTS_CURRENT_SERVER_HANDLE, NULL, 1, &pWPIs, &dwProcCount)) {
        //모든 주석 긁어오기
        for (DWORD i = 0; i < dwProcCount; i++) {
            ProcessName.push_back(pWPIs[i].pProcessName);
            //pWPIs[i].pProcessName
            //pWPIs[i].ProcessId
            //pWPIs[i].SessionId
            //pWPIs[i].pUserSid
        }
        std::sort(ProcessName.begin(), ProcessName.end());
    }

    //메모리 해제
    if (pWPIs) {
        WTSFreeMemory(pWPIs);
        pWPIs = NULL;
    }
}

int main() {
    GetAllProcess();
    for (int i = 0; i < ProcessName.size(); i++) {
        std::cout << ProcessName[i] << std::endl;
    }
    return 0;
}

아래 사진은 Windows XP이후 운영체제에서 사용할 수 있는 WTSEnumerateProcesses를 이용하여 25번째 줄 std::sort에 의해 성공적으로 오름차 순으로 정렬되어 나온 프로세스 목록이다.

WTSEnumerateProcesses로 모든 프로세스 명 가져오기

태그: C, C++, cpp, GetAllProcess, GetProcesses, GetProcessName, ProcessName, Win32API, WTS_PROCESS_INFO, WTSEnumerateProcesses, 모든 프로세스 명, 프로세스

업데이트: