반응형
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 |
댓글