반응형

[MFC] 프로그램 실행

 

 

bool ExecuteCmd(wchar_t *szFName, wchar_t *szPara, bool bShow, bool bWait)
{
     DWORD               dwRet;
     SHELLEXECUTEINFO    sei;


     //Execute ..
     //{
     ::ZeroMemory(&sei, sizeof(SHELLEXECUTEINFO));
     sei.cbSize = sizeof(SHELLEXECUTEINFO);
     // sei.hwnd   = hWnd;
     sei.lpFile = szFName;
     sei.lpParameters = szPara;
     sei.fMask = SEE_MASK_NOCLOSEPROCESS;
     sei.lpVerb = L"open";
     if (bShow)
          sei.nShow = SW_SHOW;
     else
          sei.nShow = SW_HIDE;

     DWORD result = ::ShellExecuteEx(&sei);
     if (sei.hProcess != NULL)
     {
          while (bWait)
          {
               DoEvents();
               dwRet = ::WaitForSingleObject(sei.hProcess, 100);  //INFINITE );
               if (dwRet != WAIT_TIMEOUT)
                    break;
          }

          return true;
     }
     else
     {
          return false;
     }
     //}
}

void DoEvents()
{
     MSG msg;
     while (::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
     {
          ::TranslateMessage(&msg);
          ::DispatchMessage(&msg);
     }

}

728x90
반응형