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

时间:2011-01-20 04:51:58

标签: c++ c windows mfc console-application

(我搜索了SO的答案,发现没有明确的解决方案。)

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

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

首先尝试如下:

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

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

这不是什么大问题。我们可以在启动时忽略临时窗口闪烁。

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

1 个答案:

答案 0 :(得分: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;