(我search了答案,并没有find明确的解决scheme来解决这个问题。)
我正在开发一个MFC GUI程序。 该程序运行各种子程序,包括控制台程序和shell命令脚本(.cmd)。
最初,它显示了一个GUI窗口和一个控制台窗口(使用AllocConsole
创build),因为subprocess有很多控制台输出。 但许多用户抱怨控制台窗口,所以我们决定隐藏控制台窗口。
首先尝试如下:
if (AllocConsole()) { ::ShowWindow(::GetConsoleWindow(), SW_HIDE); }
好的,没有控制台窗口,但在控制台创build时有可见的闪烁。 我已经尝试了几个CreateProcess
选项来创buildsubprocess,以防止完全显示控制台窗口,但总之失败了,我认为这实际上是不可能的。
这不是什么大不了的事 我们可以忽略启动时的临时窗口闪烁。
但是完全隐藏子控制台窗口是不可能的?
像这样为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;