2011-09-14 66 views
1

有没有办法显示窗口和CMD的组合?我想在我的Window应用程序中使用cmd作为调试信息记录器。如何显示窗口和命令行提示符?

+1

也许[试试这个](http://dslweb.nwnexus.com/~ast/dload/guicon.htm)... –

+2

便宜的选项使用OutputDebugString + dbmon.exe从sdk/sysinternals调试视图 –

+0

为您调试或为最终用户? (编辑:我问这是因为我在考虑'刚才提到的'OutputDebugString'] – AJG85

回答

2

有两种方法。

  1. 你可以继续你的应用程序作为窗口应用程序链接,并使用AllocConsole创建一个控制台窗口中,你可以输出你的调试信息。请注意,这只会打开内核句柄,因此您需要使用_open_osfhandle_fdopen将stdout/stderr连接到控制台。

  2. 您可以将您的应用程序作为控制台应用程序链接,不要忘记它现在以_tmain而不是_tWinMain()开头。

1

是的,这是完全可能的。编写一个控制台应用程序并继续进行常规窗口注册,创建一个窗口并监听事件。请注意,应避免在与窗口消息循环相同的线程上使用阻塞标准输入(只要控制台输入操作未完成,窗口将不响应)。

请注意,您仍然可以从窗口化应用程序中使用allocate a console,但我不确定标准输出和标准错误是否绑定到控制台I/O缓冲区。

1

无论控制台应用程序如何通过调用CreateWindow来执行窗口应用程序的消息循环来管理窗口。

而任何窗口应用程序(与WinMain一起输入的应用程序)可以将控制台与AllocConsole关联。

毕竟他们没有太大的不同! ;-)

+0

调用'AllocConsole'是很容易的部分;获得连接到控制台的标准输入和输出不是:-) –

+0

如果你有一个GUI应用程序,你不能在启动过程中重新使用已经存在的控制台 – Joey

+0

@Kerrek:我通常打开一个朝向“CON”的fstream,文件。 –

1

如果您只是将它用于调试目的,在Visual C++环境中,为什么不使用Windows定义的宏TRACE()。它很好地服务于调试的目的。它将写入Visual Studio的输出窗口。这很简单。

相关问题