如何在不显示Win32 GUI程序的控制台窗口的情况下执行子控制台程序?

(我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;