• [C++] 모든 프로세스명 가져오기
    프로그래밍/C++ 2019. 2. 18. 21:31
    728x90

    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를 이용한 모든 프로세스 이름를 가져오는 로직이다.

     

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

     

    25번째 줄 std::sort에 의해 성공적으로 오름차 순으로 정렬되어 나온 프로세스 목록이다.


    728x90

    댓글

Copyright ⓒ syudal.tistory.com