【发布时间】:2011-06-12 05:29:19
【问题描述】:
(我搜索了 SO 答案,但没有找到明确的解决方案。)
我正在开发一个 MFC GUI 程序。该程序运行各种子程序,包括控制台程序和shell命令脚本(.cmd)。
最初它显示一个 GUI 窗口和一个控制台窗口(使用 AllocConsole 创建),因为子进程有很多控制台输出。但是很多用户抱怨控制台窗口,所以我们决定隐藏控制台窗口。
首先尝试如下:
if (AllocConsole())
{
::ShowWindow(::GetConsoleWindow(), SW_HIDE);
}
好的,没有控制台窗口,但在控制台创建时有可见的闪烁。
我已经尝试了几个 CreateProcess 子进程创建选项,以完全阻止控制台窗口的显示,但总之失败了,我认为这实际上是不可能的。
这没什么大不了的。我们可以忽略启动时的临时窗口闪烁。
但是真的不能完全隐藏子控制台窗口吗?
【问题讨论】:
-
闪烁是预期的;您正在创建一个控制台窗口,然后将其隐藏。问题是,如果您不想让用户看到它,为什么还要创建一个控制台窗口?
ShellExecute或CreateProcess有什么问题? -
@Code Gray 这个程序 CreateProcess 各种控制台程序。没有 AllocConsole,分离的、不可控的控制台窗口会一直被创建、销毁。
-
我不知道这意味着什么。您正在运行多个不同的控制台程序,如果您每次使用
CreateProcess会创建一个新的控制台窗口而不是重用旧的控制台窗口?所以啊?这有什么问题? -
@Code Gray 你最好重读一下标题。我想在不显示控制台窗口的情况下执行子控制台程序。
-
问题是,我不知道什么是“子控制台程序”。我仔细阅读了标题,然后又看了一遍。您只是在问如何使子控制台窗口不可见。如果用户不需要能够与在该控制台窗口中运行的程序进行交互(您的问题表明您最初认为是这种情况,但后来改变了),我质疑您为什么需要该窗口你的设计)。仍然完全不清楚为什么您正在运行的这些控制台应用程序都需要从 same 控制台窗口启动。
标签: c++ c windows mfc console-application