ABOUT ME

-

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

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


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

    1
    Process[] allProc = Process.GetProcesses();
    cs

    이렇게 한 줄로 끝나지만,


    C/CPP에서는 그런 거 없다...

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    #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, NULL1&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;
    }
    cs


    Windows XP이후 운영체제에서 사용할 수 있는 WTSEnumerateProcesses를 이용한 모든 프로세스 이름를 가져오는 로직이다.


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


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


    728x90

    댓글

Copyright ⓒ syudal.tistory.com