【问题标题】:Win32 application with console output and without new window带有控制台输出但没有新窗口的 Win32 应用程序
【发布时间】:2012-12-16 09:14:51
【问题描述】:

我想创建一个工具,它既可以用作命令行(根据输入参数显示一些控制台输出),也可以根据输入参数显示一个窗口。

我正在使用带有 C++ 的 MSV2012,看来您必须在控制台和窗口应用程序之间“选择”。

我知道网络上充斥着使用 AllocConsole() 并重定向 std::out 的示例,但它不像命令行应用程序:从 Windows 控制台调用 exe 将打开一个新窗口控制台输出...

有没有办法让它使用当前的控制台窗口而不是分配一个新的?

如果不可能的话,我会做2个申请,但很遗憾..

【问题讨论】:

  • 这是一篇很老的文章,但它提供了一种可能的解决方案:codeguru.com/cpp/w-d/console/redirection/article.php/c3955/…
  • +1 关于 Alex 刚刚链接的内容。 Visual Studio 从您询问的命令行完成同样的事情。
  • 快速回答是您可以使用 AttachConsole 代替 AllocConsole,但也有缺点,并且拥有两个应用程序通常是最好的方法。有关详细信息,请参阅链接问题的答案。
  • 它在技术上不受支持,但我找到了一个很好的解决方案,方法是获取当前进程的快照、找到父进程、如果它是控制台应用程序则附加到它的控制台或使用 AllocConsole 创建一个、重定向输出,如果它是 cmd.exe 则获取父进程的线程并暂停它,在我退出我的应用程序之前恢复它

标签: c++ windows visual-c++ console-application


【解决方案1】:

其他人可能有更权威的答案,但我不相信它被支持。

通常的解决方法是创建一个 Windows 应用,但有一个命令行包装器,可以从 CLI 启动它(并提供与原始控制台通信的通道)。

【讨论】:

    【解决方案2】:

    它在技术上不受支持,但我找到了一个很好的解决方案,方法是获取当前进程的快照、找到父进程、如果它是控制台应用程序则附加到它的控制台或使用 AllocConsole 创建一个、重定向输出、获取线程父进程(如果是 cmd.exe)并暂停它,在我退出我的应用程序之前恢复它

    【讨论】:

      猜你喜欢
      • 2011-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-20
      • 1970-01-01
      相关资源
      最近更新 更多