為你的程式建立乙個控制台

2021-04-02 03:16:37 字數 2624 閱讀 7971

經常看到一些程式在執行的時候有乙個windows控制台,感覺非常cool。實際上有的時候幫助你監視系統執行是很方便的,那麼怎麼樣建立乙個控制台呢?

實際上windows為你提供了一系列的api來完成這個功能,例如:readconsole,writeconsole等,具體參見msdn。

下面我們用一段**來說明如何建立console.

1。首先呼叫allocconsole函式來為你程序建立乙個console,該api是將當前程序attache到乙個新建立的console上。你還可以通過呼叫setconsoletitle(tstrname);來設定console的title.

2。使用writeconsoleoutput來將資訊輸出到console上;在輸出之前,先要得到console的handle,這通過getstdhandle(std_output_handle)來得到,然後將資訊組織成console的格式,然後輸出。

3。關閉console。當不需要這個console的時候,呼叫freeconsole來將當前程序從console中detach中。

下面是我寫的乙個實現以上功能的介面類:

//標頭檔案

#pragma once

#include

#include

class cconsoleoutinfo

;class cconsolemgr

virtual dword processconsoleinput(input_record* pinputrec,dword dwinputs) =0;

protected:

void setconsolebuffersize(**all_rect &writeregion,

coord &buffersize,

coord &buffercoord);

void resetthreadinfo();

private:

handle m_hconsolethread;

dword m_idconsolethread;

};//cpp檔案

#include "stdafx.h"

#include "./consolemgr.h"

#define max_shadow_console_input_buffer  50

dword winapi consoleinputmonitor(lpvoid lparam);

bool winapi myhandlerroutine(dword  dwctrltype);

cconsolemgr::cconsolemgr(void)

void cconsolemgr::resetthreadinfo()

cconsolemgr::~cconsolemgr(void)

bool cconsolemgr::createconsole(tchar * tstrname,bool bfulldo**ode)

setthreadpriority(m_hconsolethread, thread_priority_normal);

resumethread(m_hconsolethread);

}return true;

}return false;

}void cconsolemgr::setconsolebuffersize( **all_rect &writeregion,

coord &buffersize,

coord &buffercoord)

bool cconsolemgr::outputtoconsole(cconsoleoutinfo &outinfo)

setconsolebuffersize(writeregion,buffersize,buffercoord);

// write texts to screen.

hconsoleoutput = getstdhandle(std_output_handle);

writeconsoleoutput(hconsoleoutput, buffer, buffersize,

buffercoord, &writeregion);

// set cursor information.

setconsolecursorinfo(hconsoleoutput, &consolecursorinfo);

// set cursor position.

setconsolecursorposition(hconsoleoutput, cursorposition);

return false;

}bool cconsolemgr::closeconsole()

closehandle(m_hconsolethread);

freeconsole();

resetthreadinfo();

return false;

}dword winapi consoleinputmonitor(lpvoid lparam)

return 0;

}bool winapi myhandlerroutine(dword  dwctrltype)

如果你想為你的程式建立乙個console,那麼你只要從該類繼承即可,然後呼叫對應的方法。該類沒有對輸出進行格式化,所以使用起來有些不方便,過段時間處理一下。

建立控制台程式

var username,userpwd string login boolean begin try while not login do 登入 begin write login readln username setconsolemode getstdhandle std input hand...

為MFC工程新增乙個控制台

在mfc工程裡有時想要輸出一些資料,可以用trace之類的,也可以寫日誌,還可以為工程新增乙個控制台直接輸出到控制台裡,這樣可以很方便的查閱輸出的資訊。效果就是這樣的,在程式生成時建立乙個控制台,在程式關閉時會隨之銷毀,發布程式時只要把對應的 注釋掉就好了。具體的操作是在你想要建立控制台的類的建立方...

沒有控制台視窗的控制台程式

include include pragma comment linker,subsystem windows entry maincrtstartup int main int argc,char argv 編譯後執行程式會彈出乙個訊息框,而沒有背後的控制台視窗。再看看下面的 include in...