#include "Tlhelp32.h"

bool ProcessKill(CString strProcessName)
{
    HANDLE         hProcessSnap = NULL; 
    BOOL           bRet      = FALSE; 
    PROCESSENTRY32 pe32      = {0}; 

    hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 

    if (hProcessSnap == (HANDLE)-1) 
        return false;

    pe32.dwSize = sizeof(PROCESSENTRY32); 

    //프로세스가 메모리상에 있으면 첫번째 프로세스를 얻는다
    if (Process32First(hProcessSnap, &pe32)) 
    { 
        BOOL          bCurrent = FALSE; 
        MODULEENTRY32 me32       = {0}; 

        do 
        { 
            bCurrent = GetProcessModule(pe32.th32ProcessID,strProcessName);
            if(bCurrent) 
            { 
                HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID); 
                if(hProcess)
                {
                    if(TerminateProcess(hProcess, 0))
                    {
                        unsigned long nCode; //프로세스 종료 상태 
                        GetExitCodeProcess(hProcess, &nCode);
                    }
                    printf("process exit\n");
                    CloseHandle(hProcess);
                    return true;
                }
            } 
        } 
        while (Process32Next(hProcessSnap, &pe32)); //다음 프로세스의 정보를 구하여 있으면 루프를 돈다.
    }
    CloseHandle (hProcessSnap); 
    return true;
}



bool GetProcessModule(DWORD dwPID,CString sProcessName)

    HANDLE        hModuleSnap = NULL; 
    MODULEENTRY32 me32        = {0}; 
    hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwPID); 

    if (hModuleSnap == (HANDLE)-1) 
        return (FALSE); 

    me32.dwSize = sizeof(MODULEENTRY32); 

//해당 프로세스의 모듈리스트를 루프로 돌려서 프로세스이름과 동일하면 
//true를 리턴한다.

    if(Module32First(hModuleSnap, &me32)) 
    { 
        do 
        { 
            printf("process name : %s\n", me32.szModule);

            if(me32.szModule == sProcessName)
            { 
                CloseHandle (hModuleSnap); 
                return true;
            } 

        } 
        while(Module32Next(hModuleSnap, &me32)); 
    } 

    CloseHandle (hModuleSnap); 
    return false;
}



사용예)

ProcessKill(_T("iexplore.exe"));

'프로그래밍 > C C++' 카테고리의 다른 글

DLLs for Beginners  (0) 2009.05.06
Always On Top  (0) 2009.05.06

+ Recent posts