MFC로 만든 프로그램 내에서 다른 프로그램을 실행시킬 수 있다.
보통 WinExec()를 많이 쓰는데 이는 실행 명령만 날려주고 스스로는 프로그램을 계속 진행해 나가지만 경우에 따라서 실행시킨 프로그램이 끝난 후에 진행해야 하는 경우도 있다.
그런 경우에 다음과 같은 부분을 쓰면 된다.
/****************
SHELLEXECUTEINFO sei;
::ZeroMemory( &sei, sizeof(SHELLEXECUTEINFO) );
sei.cbSize = sizeof(SHELLEXECUTEINFO);
sei.lpFile = "MsiExec.exe";
sei.lpParameters = "";
sei.nShow = SW_SHOW;
sei.fMask = SEE_MASK_NOCLOSEPROCESS;
sei.lpVerb = "open";
DWORD result = ::ShellExecuteEx( &sei );
if( sei.hProcess != NULL )
{
::WaitForSingleObject( sei.hProcess, INFINITE ); //여기서 해당 프로세스가 종료될때까지 대기하게됨
}
******************/
1.SHELLEXECUTEINFO : 프로그램 정보를 가질 구조체이다.
2.::ZeroMemory( &sei, sizeof(SHELLEXECUTEINFO) ) : buffer에 해당 변수를 zero(0)로 만든다.
VOID ZeroMemory(
PVOID Destination, // address of block to fill with zeros
DWORD Length // size, in bytes, of block to fill with zeros
);
3.ShellExecuteEx(&sei) : 구조체에 지정한 프로그램을 실행시킨다.
WINSHELLAPI BOOL WINAPI ShellExecuteEx(
LPSHELLEXECUTEINFO lpExecInfo
);
4.::WaitForSingleObject( sei.hProcess, INFINITE ) : 프로세스가 끝날 때까지 대기한다.
DWORD WaitForSingleObject(
HANDLE hHandle, // handle to object to wait for
DWORD dwMilliseconds // time-out interval in milliseconds
);
'MFC' 카테고리의 다른 글
유니코드(문자 인코딩, MBCS, UNICODE) (0) | 2011.04.08 |
---|---|
[ MFC ] CImage 를 이용한 이미지 파일 포맷 변환 (0) | 2011.04.08 |
AfxMessageBox 총 정리!! (0) | 2011.04.08 |
[MFC] 프로그램 안에서 외부 파일을 실행시키기(WinExec, ShellExecute, CreateProcess) (0) | 2011.04.08 |
soket()함수의 정의 (0) | 2011.04.08 |