【问题标题】:system() function opens a window [duplicate]system()函数打开一个窗口[重复]
【发布时间】:2010-01-08 19:58:38
【问题描述】:

可能重复:
Supress console when calling “system” in c++

当我在 Windows 上的 GUI 应用程序中使用 system() 函数(使用 C 语言)时,会出现一个控制台窗口。如何禁用此功能?

【问题讨论】:

  • 我对这个有点失望。是的,这是一个骗局。但是,上一个问题的答案有点弱(有一个被接受了)。
  • 在某个时候,当权者正在考虑将受骗者的答案与原始答案合并。不知道发生了什么。

标签: c windows


【解决方案1】:

CreateProcess() 如果您需要大量控制。 ShellExecute() 如果您需要快速修复。

【讨论】:

    【解决方案2】:

    其他人提到过使用 CreateProcess(大概是为了重定向输出)。

    发生这种情况的一般原因是您通过“系统”运行的程序是命令行程序。如果它是您自己编译的东西,您可以通过将其构建为 GUI 程序来摆脱控制台窗口。您应该能够通过包含 Windows.h 并使用 WinMain() 而不是 main() 作为入口点来做到这一点

    【讨论】:

    • 这也是出现控制台窗口的情况。这对我有帮助。为帖子+1。
    【解决方案3】:

    你可以试试 CreateProcess。看看这里:

    Hide console in C system() function, Win

    【讨论】:

    • 是的,我知道这一点,但我正在寻找一个简单的解决方案,也许只是添加一个 disableXXX() 函数 :)
    【解决方案4】:

    system() 是 Unix 兼容性保留。我相信它是通过执行一个外部 shell 来实现的,它本身会打开一个控制台窗口。如果您想直接执行 GUI 程序,您可能需要直接使用 win32 CreateProcess() API(和变体)。

    【讨论】:

    • 我想你会发现system() 是 ISO 标准所要求的,而不仅仅是“保留”。当然,微软并不关心标准。
    • 相同的差异。 Microsoft 希望您相信 ISO 标准的大部分内容是“保留”,您应该改用它们自己的例程。查找“警告 c4996”以查看展览 A。
    • system() 函数的 存在 是 C 标准的一部分。但它的行为是完全未指定的。对于 MS 来说,包含一个 noop system() 或崩溃的将是 100% 符合的。它试图运行 MS-DOS 命令行的事实绝对是一个旨在看起来像 Unix 的“保留”功能。尽管有任何标准的迂腐。
    • 好吧,现在我将变得更加更加迂腐。它的行为 完全指定的,即使规范是说它是定义的实现。这在 ISO 中具有非常明确的含义(与“未定义”不同),因为实现 必须 指定行为。尽管如此,我不会对你投反对票,因为你答案的第二部分很有用(第一部分虽然我不同意,但并没有降低它的用处)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-01
    • 1970-01-01
    • 2019-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多