【问题标题】:Execute console applications without creating a new console window flickering on the screen (C++, Windows)执行控制台应用程序而不创建在屏幕上闪烁的新控制台窗口(C++、Windows)
【发布时间】:2011-03-16 03:29:41
【问题描述】:

我正在编写一个 Windows 应用程序,我需要从中运行一些控制台应用程序并获取它们的输出。我尝试了两种不同的方法:

1) 使用 _popen(command, "rt") 2) 创建带有重定向输出的子进程(CreateProcess(), CreatePipe())

它们都可以工作,但是在执行某些命令期间会创建一个新的控制台窗口,这非常令人不快和丑陋。有什么方法可以在不打开新控制台的情况下在后台执行命令?

【问题讨论】:

  • 除非 CREATE_NEW_CONSOLE 标志被传入,否则 CreateProcess 不会创建新控制台。您确定您正在执行的命令没有创建自己的控制台吗?
  • 你是对的,执行的命令会创建自己的控制台,因为它们是控制台应用程序。例如,其中一个应用程序是 netstat。

标签: c++ windows console window


【解决方案1】:

您可能想尝试将CREATE_NO_WINDOWDETACHED_PROCESS 标志传递给CreateProcess

【讨论】:

    【解决方案2】:

    您可以使用libexecstream

    它允许您运行控制台程序并使用流读取它们的输出。

    如网站所述:

    • 适用于 Linux 和 Windows
    • 使用线程
    • 不依赖于任何其他非标准库
    • 仅作为源代码分发,需要您编译并将一个文件链接到您的程序中
    • 有一个BSD风格的license

    我可以补充一下,我在最近的一个项目中成功使用了它,并且没有弹出可耻的控制台窗口。

    【讨论】:

    • 你用它来运行控制台应用程序了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-18
    • 2013-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-20
    • 2014-02-17
    相关资源
    最近更新 更多