Win32编程调试信息的输出(Console)
2015-07-08 18:32
423 查看
这几天做项目的时候想实时的输出调试信息。最先想到的就是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释放控制台,这样就能做到关闭控制台而不影响软件了。
相关文章推荐
- C++ new 解析重载 .
- LeetCode-Course Schedule-解题报告
- Spring特性——Aware感知特性
- Struts2基本程序演示
- Java集合系列之LinkedList源码分析
- Python安装PyGraphics包 (使用media模块)问题
- 吐槽下java的MONTH
- sdut 上机练习8面向对象编程(对象的数组)
- GooFlow
- Java tutorial 1
- python super()
- java.lang.UnsatisfiedLinkError: Native method not found: com.baidu.platform.
- PHP简单工厂模式、工厂方法模式和抽象工厂模式比较
- C++控制台与GDI+(桌面上显示图片)
- LeetCode-Minimum Size Subarray Sum-解题报告
- C#操作Excel
- Java面向对象的思想
- c++基本特性
- LeetCode-Course Schedule-解题报告
- php 常用的好函数(持续更新)