SW 개발

win32API / 예제소스 / 실행중인 프로세스 확인

. . . 2010. 3. 29. 18:37
반응형

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);
    }
}

 

반응형