使用 Windows API CreateProcess 啟動外部程式並等待結束,適用於 C++Builder(VC 需調整訊息框呼叫)。
void contour() {
char ln[100], str[100] = "", path[100];
sprintf(ln, "%s\\%s", getcurrentdir(), "watson.exe");
sprintf(path, "%s", getcurrentdir());
chdir(path);
STARTUPINFO startinfo = { sizeof(STARTUPINFO) };
PROCESS_INFORMATION procinfo;
startinfo.dwFlags = STARTF_USESHOWWINDOW;
startinfo.wShowWindow = SW_HIDE;
strcat(str, "不能執行:");
strcat(str, ln);
BOOL make = CreateProcess(NULL, ln, NULL, NULL, FALSE, 0, NULL, NULL, &startinfo, &procinfo);
if (!make) {
MessageBox(NULL, str, "提示", MB_OK);
}
WaitForSingleObject(procinfo.hProcess, INFINITE);
}
STARTUPINFO.cb 必須設為結構大小。dwFlags=STARTF_USESHOWWINDOW + wShowWindow=SW_HIDE 隱藏視窗。CreateProcess 第二參數為命令列字串,第一參數為 NULL 表示從命令列解析執行檔。WaitForSingleObject 同步等待子進程結束。CreateProcess 失敗彈出訊息框。此範例展示基本啟動與同步,實際專案可擴充標準輸入/輸出重導向、退出碼檢查等。