一,、創(chuàng)建一個(gè)Console,AllocConsole
- AllocConsole Function 為主調(diào)進(jìn)程分配一個(gè)新的控制臺(tái),。
- 語法 C++:
- BOOLWINAPI AllocConsole(void);
- 參數(shù): 無
- 返回值:如果函數(shù)成功,,返回值是非零值;如果函數(shù)失敗,,返回值是零值。
- 備注: 一個(gè)進(jìn)程僅能關(guān)聯(lián)一個(gè)控制臺(tái),,所以該函數(shù)在主調(diào)進(jìn)程已經(jīng)具有控制臺(tái)時(shí)將會(huì)失敗,。
二、顯示HelloWorld,,WriteConsole
- 有了console,,我們還需要獲取它的句柄HANDLE,然后才能在上面顯示,。
- 方法是GetStdHandle,,它會(huì)獲取前面我們AllocConsole得到的cmd窗口的句柄;若未調(diào)用AllocConsole,,將獲取標(biāo)準(zhǔn)的輸入輸出窗口句柄,。
-
- HANDLE hdlWrite = GetStdHandle(STD_OUTPUT_HANDLE);//這里也可以使用STD_ERROR_HANDLE
- TCHAR c[] = {"Hello world!"};
- WriteConsole(hdlWrite, c, sizeof(c), NULL, NULL);
-
- 得到Console的句柄后直接使用 WriteConsole函數(shù)即可在屏幕上顯示啦。
- 這個(gè)函數(shù)有5個(gè)參數(shù):第一個(gè)是console的句柄,第二個(gè)是寫出內(nèi)容的地址,,第三個(gè)參數(shù)是預(yù)計(jì)寫出長度,,第四個(gè)參數(shù)是實(shí)際寫出長度,可為NULL,,但不建議,,若使用NULL,boundchecker會(huì)在這提示錯(cuò)誤用法,,第五參數(shù)系統(tǒng)保留,,必須使用NULL。
三,、獲取用戶輸入,, ReadConsole
- 前面我們已經(jīng)創(chuàng)建了一個(gè)Console,輸入也需要使用這個(gè)console,,但若還用上面的OUTPUT句柄就不行了,,我們會(huì)發(fā)現(xiàn),程序在下面這句會(huì)直接跳過,。
-
- ReadConsole(hdlWrite, c, 2, NULL, NULL);
- 這里,,我們還需要一個(gè)STD_INPUT_HANDLE;如下:
-
- TCHAR Buffer[100]; //開緩存
- memset(Buffer, 0, 100);
- DWORD dwCount = 0;//已輸入數(shù)
-
- HANDLE hdlRead = GetStdHandle(STD_INPUT_HANDLE);
- ReadConsole(hdlRead, Buffer, 100, &dwCount,NULL);
- 這個(gè)函數(shù)和WriteConsole類似,,但需要注意的是,,第四個(gè)參數(shù)必須指定,否則會(huì)無法讀取,。
四,、關(guān)閉Console
最后用完記得使用CloseHandle釋放句柄,如:
- CloseHandle(hdlRead);
- CloseHandle(hdlWrite);
- 若想關(guān)閉Console,,可以使用FreeConsole(); 需要注意的是,,若用戶直接點(diǎn)擊cmd窗口的關(guān)閉按鈕,整個(gè)程序(Application)將退出,!
五,、其他函數(shù)
- SetConsoleTitle("Lonefox love China"); //修改Console的標(biāo)題
-
- HANDLE hConsole = CreateConsoleScreenBuffer(
- GENERIC_READ| GENERIC_WRITE, //權(quán)限
- FILE_SHARE_READ | FILE_SHARE_WRITE, //console的共享方式
- NULL,//安全性設(shè)置,NULL默認(rèn)即可
- CONSOLE_TEXTMODE_BUFFER,//唯一值
- NULL//保留
- );//創(chuàng)建console的屏幕內(nèi)容緩存,一個(gè)進(jìn)程可以有多個(gè)ScreenBuffer
-
- SetConsoleActiveScreenBuffer(hConsole); //顯示該buffer的內(nèi)容
-
- SetConsoleTextAttribute(hConsole,
- FOREGROUND_RED | BACKGROUND_GREEN);
-
- TCHAR c[] = {"Hello world!\n"};
- WriteConsole(hConsole, c, sizeof(c), NULL, NULL); //在屏幕顯示
-
- CloseHandle(hConsole);
-
- FreeConsole();
|