프로세스 이름으로 검색 & 종료

Posted by 겨울에
2012. 6. 10. 11:59 scrap/ C/C++

//프로세스 이름으로 현재 프로세스 목록을 검색하여 일치하는 프로세스를 찾으면 핸들을 얻어 죽이는 방법입니다.

//첨부파일을 다운받아 해당 프로젝트 풀더에 압축을 풀어야 프로세스 관련 API를 사용하실 수 있습니다.

 

#include <Tlhelp32.h>
#include "Psapi.h"
#pragma comment (lib, "psapi.lib")

 

CString ProcessName;  //종료할 프로세스 이름

ProcessName.MakeUpper();

 

HANDLE hSnapshot = CreateToolhelp32Snapshot ( TH32CS_SNAPPROCESS, 0 );

if ( (int)hSnapshot != -1 )
{
    PROCESSENTRY32 pe32 ;
    pe32.dwSize=sizeof(PROCESSENTRY32);
    BOOL bContinue ;
    CString tempProcessName;

    if ( Process32First ( hSnapshot, &pe32 ) )
    {

        //프로세스 목록 검색 시작
        do
        {
            tempProcessName = pe32.szExeFile;  //프로세스 목록 중 비교할 프로세스 이름;
            tempProcessName.MakeUpper();
            if( ( tempProcessName.Find(ProcessName, 0) != -1 ) )
            {
                HANDLE hProcess = OpenProcess( PROCESS_ALL_ACCESS, 0, pe32.th32ProcessID );  //프로세스 핸들 얻기
                if( hProcess )
                {
                    if (/*프로세스 종료 조건*/)
                    {

                        //프로세스 종료
                        DWORD dwExitCode;

                        GetExitCodeProcess(hProcess, &dwExitCode);
                        TerminateProcess(hProcess, dwExitCode);

                    }
                    CloseHandle(hProcess);      
                }                
            }
            bContinue = Process32Next ( hSnapshot, &pe32 );
        } while ( bContinue );
    }
    CloseHandle( hSnapshot );
}

 

//pe32.th32ProcessID 즉 PID를 얻으면 프로세스 핸들을 얻을 수 있고 이 핸들을 이용하여 메모리 정보나 프로세스 실행 시간등의 정보를 얻을 수 있습니다.

//프로세스 정보에 관한 내용은 다음 글에 이어서 올리도록 하겠습니다.

 

출처 : 데브피아

psapi-my1over.zip