Win32编程调试信息的输出(Console)

原创 2015年07月08日 18:32:58

这几天做项目的时候想实时的输出调试信息。最先想到的就是Console。但是遇到了一个问题,关闭Console时整个程序退出了。在网上查了查,在这里总结一下。

Win32项目里创建标准的输出窗体函数AllocConsole().这个函数没有返回值,执行完成之后控制台就显示出来了

想向Console输出信息要先用GetStdHandle()来获取输出的HANDLE,参数就是STD_OUTPUT_HANDLE。

想要向控制台输出信息用WriteConsole(),具体参数不解释。

到此为止,是可以随便的输出调试信息了。

如果在程序运行时关闭了控制台,软件也会随之退出,这个不是我想要的,所以要监控控制台的关闭事件。

window是基于事件的,几乎任何操作都会有事件产生。想要捕获Console的事件,其实在程序开始的时候用

SetConsoleCtrlHandler()注册一下处理函数就OK了。
SetConsoleCtrlHandler()的第一个参数是一个WINAPI的回调函数,在这个回调函数中就可以截获控制台状态改变的信息。
在网上找了端现成的代码(如果这段代码侵犯了您的权利,请联系我534624117@qq.com):
BOOL WINAPI CtrlHandler( DWORD fdwCtrlType ) 
{ 
	switch( fdwCtrlType ) 
	{ 
		// Handle the CTRL-C signal. 
	case CTRL_C_EVENT: 
		printf( "Ctrl-C event\n\n" );
		Beep( 750, 300 ); 
		return( TRUE );

		// CTRL-CLOSE: confirm that the user wants to exit. 
	case CTRL_CLOSE_EVENT: 
		PostMessage(m_hwnd,WM_USER+10,0,0);//发送一个自定义事件,在程序的事件处理代码中将Console关闭
		return( TRUE ); 

		// Pass other signals to the next handler. 
	case CTRL_BREAK_EVENT: 
		Beep( 900, 200 ); 
		printf( "Ctrl-Break event\n\n" );
		return FALSE; 

	case CTRL_LOGOFF_EVENT: 
		Beep( 1000, 200 ); 
		printf( "Ctrl-Logoff event\n\n" );
		return FALSE; 

	case CTRL_SHUTDOWN_EVENT: 
		Beep( 750, 500 ); 
		printf( "Ctrl-Shutdown event\n\n" );
		return FALSE; 

	default: 
		return FALSE; 
	} 
}
然后调用注册函数:
SetConsoleCtrlHandler(CtrlHandler, TRUE);
这样在点击关闭控制台时就会进入:case CTRL_CLOSE_EVENT:,我在这发送了一个自定义的事件,主事件接收到之后主动用FreeConsole释放控制台,这样就能做到关闭控制台而不影响软件了。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

win32 编程之调试输出

在windows下编程时,不能再使用printf了,需要使用sprintf、wsprintf,或者采用MessageBox弹出对话框来输出相应的值。 #include int CDECL Mess...

在MFC,Win32程序中向控制台(Console)窗口输出调试信息

在MFC,Win32程序中向控制台(Console)窗口输出调试信息 在MFC程序中输出调试信息的方法有两种,一种是使用TRACE宏,可以向Output窗口输出调试信息;另一种是用MessageBo...

Win32中实现类似MFC中TRACE的函数

#include #include #include #include void LogTrace(LPCTSTR pszFormat, ...){ va_list pArgs; char...

win32程序启用控制台-- 调试输出

win32程序启用控制台(控制台文件名:conout$,conin$,conerr$)   2010-07-23 13:55:40|  分类: c++|字号 订阅 一个...

Win32应用程序使用Console窗口输出调试信息

代码鄙陋,莫要见笑。 /***********************************************************************************...

MFC调用win32窗口显示调试信息,使用AllocConsole 函数

AllocConsole Function 为主调进程分配一个新的控制台。    语法 C++ :    BOOL WINAPI AllocConsole(void);    参数:   无...

MFC调用win32窗口显示调试信息,使用AllocConsole 函数

AllocConsole Function 为主调进程分配一个新的控制台。 语法 C++ : BOOL WINAPI AllocConsole(void); 参数: 无 返回值 :如果函数成功,返...

如何在浏览器控制台(console)里输出彩色样式调试信息

最近我在研究Google+,因为发现它里面实现以一些非常奇特的效果。我打开谷歌浏览器的控制台,看到了下面的信息:警告!使用此控制台可能会让攻击者利用Self-XSS(自跨站脚本)攻击来冒充你,并窃取你...

php在eclipse的控制台console输出调试信息功能实现

早先在做PHP时就觉得有个地方不太爽,还发表文章表示不满。   jsp中用system.out.print如果是在eclipse中调试的话,eclipse会自动拦截系统输出流, 然后...

【Win32编程初探】学生信息管理系统的实现

注:该篇为16年冬季学期计算思维实训报告。 本学期非常幸运能和李青老师学习使用纯C/C++实现Win32的应用程序开发。开发过程中不使用MFC,而是直接调用WindowsAPI来实现应用程序编程...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)