【发布时间】:2010-01-08 19:58:38
【问题描述】:
当我在 Windows 上的 GUI 应用程序中使用 system() 函数(使用 C 语言)时,会出现一个控制台窗口。如何禁用此功能?
【问题讨论】:
-
我对这个有点失望。是的,这是一个骗局。但是,上一个问题的答案有点弱(有一个被接受了)。
-
在某个时候,当权者正在考虑将受骗者的答案与原始答案合并。不知道发生了什么。
当我在 Windows 上的 GUI 应用程序中使用 system() 函数(使用 C 语言)时,会出现一个控制台窗口。如何禁用此功能?
【问题讨论】:
CreateProcess() 如果您需要大量控制。 ShellExecute() 如果您需要快速修复。
【讨论】:
其他人提到过使用 CreateProcess(大概是为了重定向输出)。
发生这种情况的一般原因是您通过“系统”运行的程序是命令行程序。如果它是您自己编译的东西,您可以通过将其构建为 GUI 程序来摆脱控制台窗口。您应该能够通过包含 Windows.h 并使用 WinMain() 而不是 main() 作为入口点来做到这一点
【讨论】:
你可以试试 CreateProcess。看看这里:
【讨论】:
system() 是 Unix 兼容性保留。我相信它是通过执行一个外部 shell 来实现的,它本身会打开一个控制台窗口。如果您想直接执行 GUI 程序,您可能需要直接使用 win32 CreateProcess() API(和变体)。
【讨论】:
system() 是 ISO 标准所要求的,而不仅仅是“保留”。当然,微软并不关心标准。
system() 函数的 存在 是 C 标准的一部分。但它的行为是完全未指定的。对于 MS 来说,包含一个 noop system() 或崩溃的将是 100% 符合的。它试图运行 MS-DOS 命令行的事实绝对是一个旨在看起来像 Unix 的“保留”功能。尽管有任何标准的迂腐。