본문 바로가기
카테고리 없음

프로세스 강제종료하기

by 희황 2020. 3. 23.

////////////////////////////////////////////////////////////////////////
// 필수 추가 헤더
#include <afx.h>
#include <TlHelp32.h>

////////////////////////////////////////////////////////////////////////////
// 파라메터 : 프로세스 이름 (예) "notepad.exe"
// 프로세스가 없거나 종료 성공하면 TRUE, 종료에 실패하면 FALSE
BOOL ProcessAllKill(char* szProcessName)
{
 HANDLE hndl = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
 DWORD dwsma = GetLastError();
 HANDLE hHandle; 

 DWORD dwExitCode = 0;
 
 PROCESSENTRY32  procEntry={0};
 procEntry.dwSize = sizeof( PROCESSENTRY32 );
 Process32First(hndl,&procEntry);
 while(1)
 {
  if(!strcmp(procEntry.szExeFile,szProcessName))
  {

   hHandle = ::OpenProcess(PROCESS_ALL_ACCESS,0,procEntry.th32ProcessID);
   
   if(::GetExitCodeProcess(hHandle,&dwExitCode))
   {
    if(!::TerminateProcess(hHandle,dwExitCode))
    {
     return FALSE;
    }
   }   
  }
  if(!Process32Next(hndl,&procEntry))
  {
   return TRUE;
  }
 }
 

 return TRUE;
}


////////////////////////////////////////////////////////////////////////////
// 테스트 코드
void main()
{
 if(ProcessAllKill("notepad.exe"))
  printf("성공\n");
 else
  printf("실패\n");
 return;
}