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

9da*_*dan 11 c c++ windows mfc console-application

(我搜索了SO的答案,发现这个问题没有明确的解决方案.)

我正在研究MFC GUI程序.该程序运行各种子程序,包括控制台程序和shell命令脚本(.cmd).

最初它显示了一个GUI窗口和一个控制台窗口(由其创建AllocConsole),因为子进程有许多控制台输出.但是很多用户抱怨控制台窗口所以我们决定隐藏控制台窗口.

首先尝试如下:

if (AllocConsole())
{
    ::ShowWindow(::GetConsoleWindow(), SW_HIDE);
}
Run Code Online (Sandbox Code Playgroud)

好的,没有控制台窗口,但在控制台创建时有可见的闪烁.我已经尝试了几个CreateProcess子进程创建选项,以防止完全显示控制台窗口,但总之失败,我认为这几乎是不可能的.

这不是什么大不了的事.我们可以在启动时忽略临时窗口闪烁.

但完全隐藏儿童游戏机窗口真的不可能吗?

Joh*_*ohn 15

为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;
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!当使用带有CREATE_NO_WINDOW选项的CreateProcess时,它可以正常工作. (3认同)
  • @Cody Gray:问题是`CreateProcess`本身是不够的,而不是它错了.还需要I/O重定向和`CREATE_NO_WINDOW`标志. (3认同)