/************************************************************************/
/*
模块名:ConsoleAdapter
文件名:ConsoleAdapter.h
功  能:为非控制台程序提供控制台输出窗口
参  考:
1. http://www.codeproject.com/Articles/15836/Writing-to-and-read-from-the-console-From-a-GUI-ap
-------------------------------------------------------------------------
#ifndef __CONSOLE_ADAPTER_H__
#define __CONSOLE_ADAPTER_H__#include <iostream>
#include <io.h>
#include <fcntl.h>using namespace std;typedef enum
{INPUT_CONS,OUTPUT_CONS,BOTH
}CONSOLETYPE_e;class CConsoleAdapter
{
public:CConsoleAdapter(){m_bHasCreate = FALSE;}~CConsoleAdapter(){if (TRUE == m_bHasCreate){DestroyConsole();}}public:DWORD CreateConsole(){DWORD dwErrorCode = 0;do {if (m_bHasCreate == TRUE){break;}m_bHasCreate = AllocConsole();if (FALSE == m_bHasCreate){dwErrorCode = GetLastError();break;}else{m_eConsoleType = OUTPUT_CONS;ReplaceHandles();}} while (FALSE);return dwErrorCode;}void DestroyConsole(){try{if (m_bHasCreate != TRUE){return;}m_bHasCreate = FALSE;FreeConsole(); if( ( INPUT_CONS == m_eConsoleType ) || ( BOTH == m_eConsoleType ) ){
//                 if( 0 != m_fpCRTIn )
//                 {
//                     fclose( m_fpCRTIn );
//                 }
//                 if (-1 != m_nCRTIn)
//                 {
//                     _close( m_nCRTIn );
//                     m_nCRTIn = -1;
//                 }*stdin = m_fOldStdIn;}if( ( OUTPUT_CONS == m_eConsoleType ) || ( BOTH == m_eConsoleType ) ){
//                 if( 0 != m_fpCRTOut )
//                 {
//                     fclose( m_fpCRTOut );
//                 }
//                 if (-1 != m_nCRTOut)
//                 {
//                     _close( m_nCRTOut );
//                     m_nCRTOut = -1;
//                 }*stdout = m_fOldStdOut;}}catch ( ... ){}}private:BOOL ReplaceHandles(){try{if( ( INPUT_CONS == m_eConsoleType ) || ( BOTH == m_eConsoleType ) ){m_nCRTIn= _open_osfhandle((long) GetStdHandle(STD_INPUT_HANDLE),_O_TEXT );if( -1 == m_nCRTIn ){return FALSE;}m_fpCRTIn = _fdopen( m_nCRTIn, "r" );if( !m_fpCRTIn ){return FALSE;}m_fOldStdIn = *stdin;*stdin = *m_fpCRTIn;// if clear is not done, any cout statement before AllocConsole// will cause, the cin after AllocConsole to fail, so very important
                std::cin.clear();}if( ( OUTPUT_CONS == m_eConsoleType ) || ( BOTH == m_eConsoleType ) ){m_nCRTOut= _open_osfhandle((long) GetStdHandle(STD_OUTPUT_HANDLE),_O_TEXT );if( -1 == m_nCRTOut ){return FALSE;}m_fpCRTOut = _fdopen( m_nCRTOut, "w" );if( !m_fpCRTOut ){return FALSE;}m_fOldStdOut = *stdout;*stdout = *m_fpCRTOut;// if clear is not done, any cout statement before AllocConsole// will cause, the cout after AllocConsole to fail, so very important
                std::cout.clear();}}catch ( ... ){return FALSE;}        return TRUE;}private:BOOL m_bHasCreate;CONSOLETYPE_e m_eConsoleType;FILE m_fOldStdIn;FILE* m_fpCRTIn;int m_nCRTIn;FILE m_fOldStdOut;FILE* m_fpCRTOut;int m_nCRTOut;
};#endif

转载于:https://www.cnblogs.com/zhehan54/p/9216657.html

VS中为非控制台程序提供控制台输出窗口相关推荐

  1. C# 控制台程序 隐藏控制台窗口

    在某些项目中,需要采用控制台程序,但是又不需要通过dos窗口进行交互,同时打算隐藏掉难看的控制台窗口.实现的方法很多,有的是修改链接命令.我采用的方法略有些麻烦,首先是给窗口命名,之后找到该窗口指针, ...

  2. c语言程序运行不出现控制台,C#控制台程序,运行完窗口不退出的方法

    tyvj1125 JR&#39;s chop 描述 JR有很多双筷子.确切的说应该是很多根,因为筷子的长度不一,很难判断出哪两根是一双的.JR家里来了K个客人,JR留下他们吃晚饭.加上JR,J ...

  3. C# 控制台程序的开发和打包为一个exe文件

    目录 前言 一.我的第一个C#控制台程序 二.发布为一个exe文件 前言 本文通过C#编写一个简单的示例计算器,来演示C#的使用和使用 Visual Studio 打包为一个 exe 文件. 一.我的 ...

  4. 易语言开发控制台程序教程

    前言: 你看到这篇文章,你想学的话,那你要知道,这是个入门教程,不会讲太多深奥的东西. -------------------------------------------------------- ...

  5. nougat什么时候发布的_如何在Android Nougat的多个Windows中运行同一应用程序

    nougat什么时候发布的 With Android Nougat, Google released an oft-requested feature: the ability to run two ...

  6. MFC应用程序中添加控制台窗口---debug输出窗口

    在MFC程序中输出调试信息的方法有两种,一种是使用TRACE宏,可以向Output窗口输出调试信息:另一种是用MessageBox,弹出消息框来输出调试信息,但会影响程序的运行. 其实有一种方法可以更 ...

  7. 在vc6控制台程序中如何调用运行ImageMagick命令行工具

    在http://www.imagemagick.org/script/index.php网站下载相应的执行文件,这里以下载ImageMagick-6.6.5-10-Q16-windows-static ...

  8. 把控制台程序嵌入到 WinForm 中执行

    我们经常有一些用控制台实现的简单应用,这种应用一般都是一步一步"向导"式执行,在每一步上收集用户的输入,最后得到程序执行的结果.但有些用户可能不喜欢用键盘操作的命令行界面,还是愿意 ...

  9. VC++控制台程序中使用定时器

    我现在项目是一个控制台程序,用到的Win32API都是与界面无关的,今天需要加入定时器刷新的功能,由于没有消息循环,所以WM_TIMER消息应该如何处理呢?综合了下网上找到的资料,写了个简单的demo ...

  10. 在控制台程序中隐藏控制台窗口

    在控制台程序中隐藏控制台窗口 大家都知道,当编写一个win32 console application时,当运行此类程序的时候 默认情况下会有一个类似DOS窗口的console窗口,但是有的时候我们只 ...

最新文章

  1. 潜心学术,我删除了无数公众号,却将这10个置顶
  2. c语言嵌入式开发单片机,嵌入式开发|单片机基础
  3. 【收藏】银联在线支付商户UPMP接口的使用和说明
  4. 浅谈浏览器多进程与JS线程
  5. 在if里赋值要注意=和==的优先级,==优先于=
  6. Scalable IO in Java
  7. 《UNIX环境高级编程》--符号链接
  8. Java 基础搞定了,还能学点什么?
  9. 道路 [NOIP模拟]
  10. 037——VUE中表单控件处理之表单修饰符:lazy/number/trim
  11. 实时监听输入框值变化的完美方案:oninput onpropertychange
  12. Java高并发BlockingQueue重要的实现类
  13. 国军标GJB 151B-2013军用设备和分系统电磁发射和敏感度要求与测量(海军10项)
  14. 学术会议论文查重吗_会议论文会不会进行摘要查重?
  15. windbg内核诊断方式--转载
  16. 如何使用文件保险箱加密 Mac 数据?
  17. 人工智能 倒啤酒问题 python解法
  18. TCP与UDP协议初步学习——网络环境中分布式进程通信的基本概念
  19. DELL安装不了mysql_dell电脑win10怎么安装mysql
  20. JAVA 生成二维码并保存到本地或文件服务器

热门文章

  1. python中print说法正确的是_python中的print()输出
  2. web在session设置的账户用户名显示为空_海蜘蛛路由Web认证怎么设置 海蜘蛛路由Web认证方法【介绍】...
  3. SpringBoot-15-之整合MyBatis-注解篇+分页
  4. Mysql-mmm配置全自动切换主从关系和读写分离
  5. 炫酷的sublimeText开发工具 快捷键总结
  6. Ubuntu安装ARM架构GCC工具链(ubuntu install ARM toolchain)最简单办法
  7. ATL之深入浅出书评(转)
  8. ACID, BASE和CAP
  9. poj - 2255 Tree Recovery
  10. 使用5502自带的UART口发送数据乱码的问题