MFC下怎麼藏住console window

之前開發的某個自用的小程式程式,需要在程式裡面執行另外一支外部程式我很直覺的想到了system(),這function的確也很盡職的達到呼叫的目的,但是缺點是他會帶出一個黑黑醜醜的console window,畫面上實在非常不美觀,為了隱藏這個醜陋的視窗,我決定想盡辦法把那該死的console window給隱藏起來,結果因為我跟windows api的不熟,花了我不少功夫,所以特地紀錄一下。

隱藏方法就是使用ShellExecuteEx() + WaitForSingleObject() 就可以完美的達成目標, 詳細用法如下:


SHELLEXECUTEINFO ShExecInfo = {0};
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = NULL;
ShExecInfo.lpFile = "c:\\xxx\\xxx.exe";  // 外部呼叫的檔案路徑及名稱
ShExecInfo.lpParameters = "";
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_HIDE;   // SW_HIDE就是把window給hide起
ShExecInfo.hInstApp = NULL;
ShellExecuteEx(&ShExecInfo);  // 執行吧!!

//為了確定該支console程式完整執行完才繼續往下, 使用WaitForSingleObject
//去等待剛剛那個process, 等待timeout時間設為INFINITE (永久)
WaitForSingleObject(ShExecInfo.hProcess,INFINITE);
本篇發表於 Windows, 技術 並標籤為 , , 。將永久鏈結加入書籤。

MFC下怎麼藏住console window 有 1 則回應

  1. 通告: waitforsingleobject

發表迴響

您的電子郵件位址並不會被公開。 必要欄位標記為 *

*

您可以使用這些 HTML 標籤與屬性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>