📄 consolemanage.cpp
字号:
// ConsoleManage.cpp: implementation of the CConsoleManage class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "ConsoleManage.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CConsoleManage::CConsoleManage()
{
m_hConsoleBuffer = INVALID_HANDLE_VALUE;
}
CConsoleManage::~CConsoleManage()
{
if (m_hConsoleBuffer != INVALID_HANDLE_VALUE)
{
//关闭分配的Console Screen缓冲区
CloseHandle(m_hConsoleBuffer);
m_hConsoleBuffer = INVALID_HANDLE_VALUE;
//将控制台与进程断开连接
FreeConsole();
}
}
/////////////////////////////////////////////////////////////////////////
//函数名称:StartConsole
//函数功能:----------启动一个Console-----------------------
//入口参数:无
//出口参数:无
//返回值:int-----CONSOLE_WORK_OK 表示控制台启动成功
// CONSOLE_WORK_FAILED 表示控制台启动失败
// CONSOLE_ALREADY_STARTED 表示在调用该函数前已经存在一个与调用进程相连的控制台了
//开发人员:杨军
//开发日期:2004-5-31
//修改人员:
//修改日期:
/////////////////////////////////////////////////////////////////////////
int CConsoleManage::StartConsole()
{
//如果当前已经启动了一个控制台,则不能启动第二个控制台
//因为一个进程同一时间只能拥有一个控制台
if (m_hConsoleBuffer != INVALID_HANDLE_VALUE)
{
return CONSOLE_ALREADY_STARTED;
}
//分配一个Console给调用进程
if (!AllocConsole())
{
return CONSOLE_WORK_FAILED;
}
m_hConsoleBuffer = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
CONSOLE_TEXTMODE_BUFFER,
NULL);
if (INVALID_HANDLE_VALUE == m_hConsoleBuffer)
{
FreeConsole();
return CONSOLE_WORK_FAILED;
}
return CONSOLE_WORK_OK;
}
/////////////////////////////////////////////////////////////////////////
//函数名称:ExitConsole
//函数功能:----------关闭已经打开的Console-----------------
//入口参数:无
//出口参数:无
//返回值:int ---------------------CONSOLE_WORK_OK-------控制台关闭成功
// CONSOLE_WORK_FAILED---控制台关闭失败
// CONSOLE_NOT_STARTED----控制台尚未启动
//开发人员:杨军
//开发日期:2004-5-31
//修改人员:
//修改日期:
/////////////////////////////////////////////////////////////////////////
int CConsoleManage::ExitConsole()
{
//如果当前没有打开的控制台
if (INVALID_HANDLE_VALUE == m_hConsoleBuffer)
{
return CONSOLE_NOT_STARTED;
}
//关闭分配的Console Screen缓冲区
if (!CloseHandle(m_hConsoleBuffer))
{
return CONSOLE_WORK_FAILED;
}
m_hConsoleBuffer = INVALID_HANDLE_VALUE;
//将控制台与进程断开连接
if (!FreeConsole())
{
return CONSOLE_WORK_FAILED;
}
return CONSOLE_WORK_OK;
}
/////////////////////////////////////////////////////////////////////////
//函数名称:WriteData
//函数功能:----------向控制台输出字符串--------------------
//入口参数:CString argData--------要向控制台输出的字符串
//出口参数:无
//返回值:int ---------------------CONSOLE_WORK_OK-------控制台关闭成功
// CONSOLE_WORK_FAILED---控制台关闭失败
// CONSOLE_NOT_STARTED----控制台尚未启动
//开发人员:杨军
//开发日期:2004-5-31
//修改人员:
//修改日期:
/////////////////////////////////////////////////////////////////////////
int CConsoleManage::WriteData(CString argData)
{
//------------------变量定义部分 begins------------------------------
HANDLE hOutput = INVALID_HANDLE_VALUE;
DWORD dwWritten = 0;
//------------------变量定义部分 ends--------------------------------
if (INVALID_HANDLE_VALUE == m_hConsoleBuffer)
{
return CONSOLE_NOT_STARTED;
}
//获得Console输出句柄
hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
if (INVALID_HANDLE_VALUE == hOutput)
{
return CONSOLE_WORK_FAILED;
}
//向控制台缓冲区输出数据
if (!WriteConsole(hOutput, (CONST VOID *)argData, argData.GetLength(), &dwWritten, NULL))
{
return CONSOLE_WORK_FAILED;
}
return CONSOLE_WORK_OK;
}
/////////////////////////////////////////////////////////////////////////
//函数名称:ReadData
//函数功能:----------从控制台输入一组数据------------------
//入口参数:DWORD argToRead-----------------用户请求读求的数据的长度(按字节计算)
//出口参数:CString& argData---------------储存用户输入的数据
// DWORD& argRead-------------------实际获得的输入的数据的长度(按字节计算)
//返回值:int ---------------------CONSOLE_WORK_OK-------控制台关闭成功
// CONSOLE_WORK_FAILED---控制台关闭失败
// CONSOLE_NOT_STARTED----控制台尚未启动
//开发人员:杨军
//开发日期:2004-5-31
//修改人员:
//修改日期:
/////////////////////////////////////////////////////////////////////////
int CConsoleManage::ReadData(CString& argData, DWORD argToRead, DWORD& argRead)
{
//------------------变量定义部分 begins------------------------------
HANDLE hInput = INVALID_HANDLE_VALUE;
LPTSTR lpBuffer = NULL;
//------------------变量定义部分 ends--------------------------------
if (INVALID_HANDLE_VALUE == m_hConsoleBuffer)
{
return CONSOLE_NOT_STARTED;
}
//获得Console输入句柄
hInput = GetStdHandle(STD_INPUT_HANDLE);
if (INVALID_HANDLE_VALUE == hInput)
{
return CONSOLE_WORK_FAILED;
}
//用户请求读取的数据的长度不能 <= 0
if (argToRead <= 0)
{
return CONSOLE_WORK_FAILED;
}
argData.Empty();
lpBuffer = argData.GetBuffer(argToRead);
if (!ReadConsole(hInput, lpBuffer, argToRead, &argRead, NULL))
{
return CONSOLE_WORK_FAILED;
}
argData.ReleaseBuffer();
return CONSOLE_WORK_OK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -