C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[11768] Re:[질문]createprocess로 프로그램 실행 후 대기상태에서..
안종필 [] 2039 읽음    2001-10-14 15:17
문제를 해결했습니다..

/* CreateProcess로 프로그램을 실행시키고 자식프로세스가 종료할때까지 부모프로세스는 대기 상태로.*/
/* 자식프로세스가 실행중에 대기상태에 있는 부모프로세스를 클릭하면 작동은 안하지만...  */
/* 메시지큐에 부모프로세스에 대한 메시지(LBUTTONDOWN, WM_KEYDOWN 등등..)가 계속쌓이겠죠 */
/* 메시지큐에 쌓여있는 메세지들은 자식프로세스가 종료함과 동시에 부모프로세스에 전달되어 */
/* 부모프로세스에 해당하는 메세지에 대한 이벤트가 작동하죠.. 부모프로세스를 대기상태로 한 이유가 */
/* 자식프로세스가 있는 동안은 아무일도 안하고 자식프로세스가 종료되도 작동을 막을려고 했던건데..*/
/* 쉽게 얘기하면 프로그램을 모달로 실행시킬려는 목적에 어긋나게 되는 셈이죠.. */
/* 그래서, source2에서 PeekMessage에서 해당 윈도우의 메세지에 대해 PM_REMOVE를 사용하여 */
/* 메세지를 clear했죠.. 이렇게 하니깐 부모프로세스는 원하는데로 제어가 되더군요.. */
/* 제가 걱정하는건 무한루프에 빠질 가능성이 있는 소스라서.. 걱정이 되는군요... */
/* 혹시나,,, 소스중에서 잘못된 점이 있거나..하면 지적해 주세요... */

<SOURCE1>

HWND hHandle;                                   
hHandle = ::FindWindow (NULL, g_strSheetTitle) ;
CreateProcess( NULL, (LPSTR)(LPCTSTR)strTemp, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);

WaitForInputIdle( GetCurrentProcess(), INFINITE );

g_bProcess = false;                               
if( pi.hProcess ){
    DWORD dwExitCode = STILL_ACTIVE;
    while ( dwExitCode == STILL_ACTIVE )
    {
        WaitForSingleObject( pi.hProcess, 0 );
    GetExitCodeProcess( pi.hProcess, &dwExitCode );
    AfxGetMainWnd()->UpdateWindow ();
    ::UpdateWindow(hHandle);                       
    g_bProcess = true;                       
    }
}
**************************************************************************************

<SOURCE2>

if ( g_bProcess )
{
    HWND hwnd;
    MSG msg;

    hwnd = ::FindWindow (NULL, g_strSheetTitle) ;
    while (PeekMessage(&msg, hwnd,  0, 0, PM_REMOVE))
    {
        switch(msg.message)
        {
    case WM_LBUTTONDOWN:
    case WM_RBUTTONDOWN:
    case WM_KEYDOWN:
        pMsg->wParam = 0;
        pMsg->lParam = 0;
        pMsg->message = 0;
        break;
    default:
        pMsg->wParam = 0;
        pMsg->lParam = 0;
        pMsg->message = 0;
    break;                   
        }
    }
    g_bProcess = false;
}

+ -

관련 글 리스트
11765 [질문]createprocess로 프로그램 실행 후 대기상태에서.. 안종필 1324 2001/10/13
11768     Re:[질문]createprocess로 프로그램 실행 후 대기상태에서.. 안종필 2039 2001/10/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.