【问题标题】:How can I output to the parent console window from a Win32 C++ application?如何从 Win32 C++ 应用程序输出到父控制台窗口?
【发布时间】:2018-10-15 23:07:51
【问题描述】:

我有一个 WinAPI/Win32 应用程序。如果我在从命令提示符运行时尝试使用 cin/cout/cerr,它就不起作用。我尝试将项目类型从 Windows 应用程序切换到控制台应用程序,但问题是当我通过双击可执行文件正常运行时出现控制台窗口。

所以我的问题是:有什么方法可以在 Win32 应用程序中将 cin/cout/cerr 与父(调用)控制台窗口一起使用? (如果参数/c/? 被传递,我只想要这种行为,所以如果不带参数调用它,那么不管它应该启动什么GUI)。

【问题讨论】:

  • 如果你想使用标准输入和输出,你需要一个控制台窗口。不清楚你在这里问什么。
  • 如果我从控制台窗口运行程序,我希望程序输出到同一个控制台。 cin、cout 和 cerr 似乎不起作用。这就是我要解决的问题
  • 如果你创建一个控制台应用程序,它就会这样做。
  • 是的,但是当程序正常运行并设置为控制台应用程序时,它会在后台显示一个控制台窗口,这是我不想要的。我只希望它在从控制台运行时使用控制台。
  • 因此,需要明确的是,如果应用程序是从控制台启动的,您希望输出到该控制台。如果应用程序是从资源管理器之类的东西启动的,您根本不需要控制台吗?

标签: c++ winapi cmd


【解决方案1】:

默认情况下,GUI 应用程序没有附加控制台窗口。

从控制台进程运行 GUI 应用程序时,GUI 应用程序可以使用 AttachConsole() 将自己附加到控制台。

或者,如果 GUI 应用程序不是从控制台进程运行,但仍想使用控制台窗口,它可以使用 AllocConsole() 创建自己的控制台窗口。

GUI 应用程序连接到控制台后,它可以使用 GetStdHandle() 获取控制台的 STDIN/STDOUT 句柄,然后重定向 cin/cout 以使用它们(如何使用取决于您的特定 STL实施)。

或者,您可以忽略cin/cout,直接使用ReadConsole()WriteConsole()

【讨论】:

    猜你喜欢
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 2014-02-17
    • 2019-01-18
    • 1970-01-01
    • 2015-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多