【问题标题】:The problem of attachconsoleattachconsole的问题
【发布时间】:2015-12-17 19:31:45
【问题描述】:

我需要让 Windows GUI 应用程序可以在控制台中运行,所以我在使用命令行调用应用程序时将控制台附加到进程。但是,在应用程序退出后,除非按下 ENTER 键,否则不会显示带有路径的控制台提示。有没有什么办法可以不按回车键直接显示带有路径的提示?谢谢。

【问题讨论】:

  • 当您的程序开始运行时,它已经显示了提示。你必须让它等待。使用启动/等待 yourapp.exe。如果这不是您想要的,那么您需要使用 AllocConsole()。
  • 我在 golang 中遇到了同样的问题,并认为某处存在错误/资源泄漏,并且 cmd 实际上被锁定了。原来提示其实早打印出来了,一切正常。

标签: c++ winapi


【解决方案1】:

简短回答:这是不可能的。

长答案:好吧,如果您愿意稍微放宽您的要求,这是有可能的。你基本上有三个选择:

  1. 你已经做了什么。您可以将 GUI 应用程序附加到控制台,但 cmd.exe 不会等待您的应用程序退出。
  2. 创建一个 GUI 应用程序并在 GUI 应用程序中打开控制台。控制台只会在您申请时持续使用。
  3. 或者您可以稍微重构您的应用程序/源代码并提供两个可执行文件,一个直接启动 GUI 的 GUI,另一个是控制台可执行文件。

【讨论】:

  • 感谢您的回答。在研究这一点时,我发现了另一个选项,您可以使用start command 启动应用程序。例如start /wait application.exe paramaters.
【解决方案2】:

在 C# 中,我使用 SendKeys.SendWait("{ENTER}"); 来执行此操作。我认为在 C++ 中,keybd_event 函数做了类似的事情。

【讨论】:

    【解决方案3】:

    与使用 MayaBatch 的 Autodesk Maya 一样,您可以构建一个小型控制台应用程序,该应用程序基本上使用 CreateProcess 运行您的 GUI 应用程序,并使用 WaitForSingleObject 等待。

    您必须在控制台中使用此“批处理”版本的应用程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-24
      • 1970-01-01
      • 1970-01-01
      • 2017-05-18
      • 2013-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多