반응형
Xeno's Study Blog (http://XenoStudy.tistory.com
- 글쓴이 : Xeno
- 출처 : 나 / MSDN / 인터넷여기저기
- 기타사항 : winCE / WM동작확인
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) 현재 실행중인 프로그램 이름 열거하기..
#include <Windows.h> #include <tlhelp32.h> // CreateToolhelp32Snapshot() 를 사용하기 위한 해더포함 int main() { HANDLE hProcess = NULL; PROCESSENTRY32 pe32 = {0}; hProcess = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 ); pe32.dwSize = sizeof( PROCESSENTRY32 ); if( Process32First( hProcess, &pe32 ) ) { do { printf("%20s", pe32.szExeFile); count++; if(count == 3) { printf("\n"); count = 0; } else printf("\t"); } while ( Process32Next( hProcess, &pe32 ) ); } else { cout << "???" << endl; } CloseHandle (hProcess); return 0; }
예제소스2) 열거된 결과를 갖고 특정프로세스 죽이기
if ( stricmp ( pe32.szExeFile, szPath ) == 0 ) { HANDLE hProcess = NULL; if ( hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, pe32.th32ProcessID)) { TerminateProcess ( hProcess, 0 ); CloseHandle ( hProcess ); } }
예제소스3) 특정 Application 이 종료될때까지 기다리기...
void TestExeCheckThreadFunc() { HANDLE hProcess = NULL; PROCESSENTRY32 pe32 = {0}; BOOL bRun=TRUE;; while(bRun) { bRun = FALSE; hProcess = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 ); if (hProcess != INVALID_HANDLE_VALUE) { pe32.dwSize = sizeof( PROCESSENTRY32 ); if( Process32First( hProcess, &pe32 ) ) { do { //pe32.szExeFile 에 현재 실행중인 모든 Process의 이름이 들어온다. if (!wcscmp(pe32.szExeFile,_T("Test.exe"))) { RETAILMSG(MSG_ONOFF, (TEXT("Test.exe yet running wait...\r\n") ) ); bRun = TRUE; continue; } } while ( Process32Next( hProcess, &pe32 ) ); } CloseToolhelp32Snapshot (hProcess); } else { bRun = FALSE; } Sleep(300); } }
반응형