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

标签 c++ c windows mfc console-application

(我搜索了 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;

关于c++ - 如何在不显示 Win32 GUI 程序的控制台窗口的情况下执行子控制台程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4743559/

相关文章:

c - Linux Kernel Makefile.build 构建外部模块时的奇怪行为

c++ - 如何以编程方式关闭 Windows 中打开的文件/应用程序?

python - "Open with..."Windows 上的文件,带有 python 应用程序

c++ - 为什么 POSIX 允许在现有文件结尾 (fseek) 之外寻找只读模式

c++ - 通用 lambda 的元数

c - 删除二叉搜索树右子树的右节点(C)

c - 如何在C中的fopen中使用字符串数组作为txt文件名

windows - 从开始菜单外壳链接启动的 Electron 应用程序会改变 process.execPath?

c++ - 带有字符串数组的段错误c++

iphone - 从 iPhone 中的 WAV 文件中去除背景噪音