[C++] 모든 프로세스명 가져오기
카테고리: C++
문제 상황
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
에 의해 성공적으로 오름차 순으로 정렬되어 나온 프로세스 목록이다.