이번 글에서는 CreateProcess와 WaitForInputIdle 함수를 사용하는 방법을 알아보겠습니다.
외부 프로그램을 실행하다 보면 컴퓨터가 느리거나 해서 실행이 늦게 될 수 있습니다.
그럴때 WaitForInputIdle을 사용하셔서 코딩을 하시면 편합니다.
저같은 경우 카카오톡이 느리게 실행됩니다. 아래 코드는 카톡 실행 후 메시지를 표시하는 코드입니다.
STARTUPINFO suinfo;
PROCESS_INFORMATION pinfo;
memset( &suinfo, 0, sizeof( suinfo ) );
suinfo.cb = sizeof( suinfo );
TCHAR szProgramm[MAX_PATH] = _T( "C:\\Program Files (x86)\\Kakao\\KakaoTalk\\KakaoTalk.exe" );
// 성공시 0이 아닌 값 반환
BOOL bRes = ::CreateProcess( szProgramm, NULL, NULL, NULL, FALSE, 0, NULL, NULL, &suinfo, &pinfo );
if ( 0 != bRes )
{
// 성공 시 0 반환
DWORD dwRes = ::WaitForInputIdle( pinfo.hProcess, INFINITE );
CString sMsg;
sMsg.Format( _T( "WaitForInputIdle %d" ), dwRes );
AfxMessageBox( sMsg );
}
함수가 직관적이라 CreateProcess는 언급하지 않겠습니다.
조심하셔야 할 것은 WaitForInputIdle 2번째 인자에 INFINITE를 입력했는데 만약 실행하는 프로세스가 실행이 안되고 응답없음 상태로 빠져버리면 내 프로세스도 무기한 대기 상태로 빠진다는 겁니다.
유의하셔서 사용하시길 바랍니다.
외부 프로그램을 실행하는 방법은 ShellExecute을 이용하는 방법도 있습니다. 여기를 참고해주세요.