簡體   English   中英

如何在不顯示Win32 GUI程序的控制台窗口的情況下執行子控制台程序?

[英]How to execute child console programs without showing the console window from the Win32 GUI program?

(我搜索了SO的答案,發現這個問題沒有明確的解決方案。)

我正在研究MFC GUI程序。 該程序運行各種子程序,包括控制台程序和shell命令腳本(.cmd)。

最初它顯示了一個GUI窗口和一個控制台窗口(使用AllocConsole創建),因為子進程有許多控制台輸出。 但是很多用戶抱怨控制台窗口所以我們決定隱藏控制台窗口。

首先嘗試如下:

if (AllocConsole())
{
    ::ShowWindow(::GetConsoleWindow(), SW_HIDE);
}

好的,沒有控制台窗口,但在控制台創建時有可見的閃爍。 我已經為子進程創建嘗試了幾個CreateProcess選項,以防止完全顯示控制台窗口,但總之失敗,我認為這幾乎是不可能的。

這不是什么大不了的事。 我們可以在啟動時忽略臨時窗口閃爍。

但完全隱藏兒童游戲機窗口真的不可能嗎?

為CreateProcess調用設置STARTUPINFO,如下所示:

    STARTUPINFO si = { 0 };
    si.cb = sizeof(si);
    si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
    si.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
    si.hStdOutput =  GetStdHandle(STD_OUTPUT_HANDLE);
    si.hStdError = GetStdHandle(STD_ERROR_HANDLE);
    si.wShowWindow = SW_HIDE;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM