[MFC] 프로세스 검색 및 강제 종료 => 변형(검색및 카운팅~)

bool CDanceFeverApp::ProcessFind( CString strProcessName, int nFindCount )
{
    HANDLE   hProcessSnap = NULL; 
    BOOL   bRet   = FALSE; 
    PROCESSENTRY32 pe32   = {0};
    int    nCount   = 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)
                {
                     nCount++;
                /*  if(TerminateProcess(hProcess, 0))
                     {
                         unsigned long nCode; //프로세스 종료 상태 
                         GetExitCodeProcess(hProcess, &nCode);
                     }
               */   printf("process exit\n");
                     CloseHandle(hProcess);
                }
            }
        } 
        while (Process32Next(hProcessSnap, &pe32)); //다음 프로세스의 정보를 구하여 있으면 루프를 돈다.
    }

 if( nCount >= nFindCount )
 {
  CloseHandle (hProcessSnap);
  return true;
 }
 else
 {
  CloseHandle (hProcessSnap);
  return false;
 }
}

 

bool CDanceFeverApp::GetProcessModule(DWORD dwPID,CString sProcessName)
{
 int    nCount = 0;
 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;
}

bool CDanceFeverApp::FindOverlapProcess()
{
 bool bFind = false;

 if( bFind = ProcessFind( _T("DanceFeverC.exe")) )
  return true;
 if( bFind = ProcessFind( _T("DanceFeverC_d.exe")) )
  return true;
 if( bFind = ProcessFind( _T("Patch.exe")) )
  return true;
 if( bFind = ProcessFind( _T("Patch_d.exe")) )
  return true;
 if( bFind = ProcessFind( _T("DanceFever.exe"), 2 ) )
  return true;
 if( bFind = ProcessFind( _T("DanceFever_d.exe"), 2 ) )
  return true;


 return false;
}

by 시즈모드 | 2007/10/01 20:58 | :: Study MFC

※ 로그인 사용자만 덧글을 남길 수 있습니다.
 

◀ 이전 페이지다음 페이지 ▶