본문 바로가기
C & C++/C & C++

[API] 프로세스 관리 01

by izen8 2011. 11. 24.
반응형

CreateToolhelp32Snapshot() 와 Process32First(), Process32Next() 를 사용하여 현재 OS가 실행중인 프로세서들을 확인할수있다.

관련 MSDN :
- HOWTO: Win32 API를 사용하여 응용 프로그램 열거 : http://support.microsoft.com/kb/175030/ko
- PROCESSENTRY32 Structure : http://msdn.microsoft.com/en-us/library/ms684839%28VS.85%29.aspx

 

예제소스1) 현재 실행중인 프로그램 이름 열거하기..

  1. #include <Windows.h>   
  2. #include <tlhelp32.h>   // CreateToolhelp32Snapshot() 를 사용하기 위한 해더포함     
  3.   
  4. int main()   
  5. {   
  6.     HANDLE   hProcess = NULL;   
  7.     PROCESSENTRY32 pe32 = {0};   
  8.     hProcess = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );   
  9.     pe32.dwSize = sizeof( PROCESSENTRY32 );   
  10.     if( Process32First( hProcess, &pe32 ) )   
  11.     {   
  12.         do    
  13.         {   
  14.             printf("%20s", pe32.szExeFile);   
  15.             count++;   
  16.             if(count == 3)   
  17.             {   
  18.                 printf("\n");   
  19.                 count = 0;   
  20.             }   
  21.             else  
  22.                 printf("\t");   
  23.         } while ( Process32Next( hProcess, &pe32 ) );   
  24.     }   
  25.     else  
  26.     {   
  27.         cout << "???" << endl;   
  28.     }   
  29.   
  30.     CloseHandle (hProcess);   
  31.   
  32.     return 0;   
  33. }  

예제소스2) 열거된 결과를 갖고 특정프로세스 죽이기

  1. if ( stricmp ( pe32.szExeFile, szPath ) == 0 )   
  2. {   
  3.     HANDLE hProcess = NULL;   
  4.     if ( hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, pe32.th32ProcessID))    
  5.     {   
  6.          TerminateProcess ( hProcess, 0 );   
  7.          CloseHandle ( hProcess );   
  8.     }   
  9. }  

예제소스3) 특정 Application 이 종료될때까지 기다리기...

  1. void TestExeCheckThreadFunc()   
  2. {   
  3.     HANDLE   hProcess = NULL;   
  4.     PROCESSENTRY32 pe32 = {0};   
  5.     BOOL bRun=TRUE;;   
  6.   
  7.     while(bRun)   
  8.     {   
  9.         bRun = FALSE;   
  10.         hProcess = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );   
  11.         if (hProcess != INVALID_HANDLE_VALUE)   
  12.         {   
  13.             pe32.dwSize = sizeof( PROCESSENTRY32 );   
  14.             if( Process32First( hProcess, &pe32 ) )   
  15.             {   
  16.                 do    
  17.                 {   
  18.                     //pe32.szExeFile 에 현재 실행중인 모든 Process의 이름이 들어온다.   
  19.                     if (!wcscmp(pe32.szExeFile,_T("Test.exe")))   
  20.                     {   
  21.                         RETAILMSG(MSG_ONOFF, (TEXT("Test.exe yet running wait...\r\n") ) );   
  22.                         bRun = TRUE;   
  23.                         continue;   
  24.                     }   
  25.                 } while ( Process32Next( hProcess, &pe32 ) );   
  26.             }   
  27.             CloseToolhelp32Snapshot (hProcess);    
  28.         }   
  29.         else    
  30.         {   
  31.             bRun = FALSE;   
  32.         }   
  33.         Sleep(300);   
  34.     }   
  35. }  
반응형

댓글