반응형
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;
- }
#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 );
- }
- }
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);
- }
- }
반응형
'C & C++ > C & C++' 카테고리의 다른 글
파일 복사 삭제, 덮어쓰기 (0) | 2011.12.13 |
---|---|
[API] 프로세스 관리 02 (0) | 2011.11.24 |
MS Office 엑셀 오토메이션 (Excel Automation) (0) | 2011.11.21 |
도스명령어(command) 얻기 (0) | 2011.11.17 |
현재 메모리 정보 얻어오기 (0) | 2011.11.17 |
댓글