본문 바로가기

My Study/Programming&Theory

현재 실행 중인 프로세스 찾기

작업관리자 창에서 응용프로그램에는 없고 프로세스에 있는 것을 감지해서 무언가를 하고 싶을 때 사용하는 방법 입니다.

간단하게 현재 프로세스를 찾아내서 프로세스 명과 PID를 출력해주는 프로그램을 가지고 설명을 하겠습니다.

소스와 출력 결과를 먼저 보여드리겠습니다.(크게 보시려면 클릭해주세요)


9번째 줄에서 사용한
CreateToolhelp32Snapshot 함수를 설명하겠습니다.
해당 함수는 사진을 찍는 함수 입니다.
첫번째 인자로
TH32CS_SNAPPROCESS가 전달 되었는데 이 뜻은 현재 실행 중인 프로세스를 찍으라는 의미 입니다.
두번째 인자는 찍을 
PID를 지정하는 것인데 0으로 하면 모든 프로세스를 찍으라는 의미 입니다.

결론을 내보면 현재 실행 중인 모든 프로세스를 찍어라 라는 뜻입니다.

11번째 줄에서
PROCESSENTRY32 구조체로 변수를 하나 만들었는데 프로세스에 대한 정보를 담을 변수 입니다.

13번째 줄에서
Process32First 함수가 호출 되는데 이 함수는 아까 찍어논 프로세스들 중에서 첫번째 프로세스에 대한 정보를 얻어오라는 것 입니다. 아마 실행하면 pe32구조체 변수에 전부 셋팅이 되었을 것입니다.

이때 이 것을 출력해 줘야 하는데 24번째 줄을 보시면 프로세스명과 PID를 알 수 있습니다.
pe32.szExeFile = 프로세스 명이 들어있음
pe32.th32ProcessID = PID가 들어있음

이렇게 출력을 해주었으면 두번째 프로세스 정보를 얻어와야겠죠??

25번째 줄에서 사용하고 있는
Process32Next 함수가 그 다음 프로세스 정보를 가져오는 함수입니다. 당연히 위에서 찍어논 프로세스들 중에서 가져오는 것 입니다.

do~while문을 돌면서 찍어논거에서 첫번째 프로세스부터 마지막 프로세스까지 전부 거친다음..
마지막 프로세스가 끝나고 더이상 프로세스가 없기 때문에 NULL을 리턴하게 되고 while문을 빠져나오게 됩니다.

다시 새로고침해서 검색하려면 사진을 다시 찍어야 겠죠.
CreateToolhelp32Snapshot함수를 사용해서 말입니다.

만약에 해당 프로세스를 찾아서 꺼버린다거나 수정해야 한다면..?
pe32.szExeFile와 원하는 프로세스 명과 비교해서 같다면 이라는 루틴을 만들어 주시면 될꺼같습니다.