阅读背景:

MSDN 控制台输入输出及属性设置

来源:互联网 
#include #include int main(void) { HANDLE hStdout;HANDLE hNewScreenBuffer; SMALL_RECT srctReadRect; SMALL_RECT srctWriteRect; CHAR_INFO chiBuffer[160]; // [2][80]; COORD coordBufSize; COORD coordBufCoord; BOOL fSuccess; // 获取一个用于拷贝的标准屏幕输出句柄 Get a handle to the STDOUT screen buffer to copy from and // 创建一个新的屏幕缓冲用于拷贝 create a new screen buffer to copy to. hStdout = GetStdHandle(STD_OUTPUT_HANDLE); hNewScreenBuffer = CreateConsoleScreenBuffer( GENERIC_READ | // read/write access GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, // shared NULL, // default security attributes CONSOLE_TEXTMODE_BUFFER, // must be TEXTMODE NULL); // reserved; must be NULL if (hStdout == INVALID_HANDLE_VALUE || hNewScreenBuffer == INVALID_HANDLE_VALUE) { printf("CreateConsoleScreenBuffer failed - (%d)\n", GetLastError()); return 1; }else{printf("CreateConsoleScreenBuffer successfully - (%d)\n", GetLastError()); } // Make the new screen buffer the active screen buffer. if (! SetConsoleActiveScreenBuffer(hNewScreenBuffer) ) { printf("SetConsoleActiveScreenBuffer failed - (%d)\n", GetLastError()); return 1; }else{printf("SetConsoleActiveScreenBuffer successfully - (%d)\n", GetLastError()); } // Set the source rectangle. srctReadRect.Top = 0; // top left: row 0, col 0 srctReadRect.Left = 0; srctReadRect.Bottom = 1; // bot. right: row 1, col 79 srctReadRect.Right = 79; // The temporary buffer size is 2 rows x 80 columns. coordBufSize.Y = 2; coordBufSize.X = 80; // The top left destination cell of the temporary buffer is // row 0, col 0. coordBufCoord.X = 0; coordBufCoord.Y = 0; // Copy the block from the screen buffer to the temp. buffer. fSuccess = ReadConsoleOutput( hStdout, // screen buffer to read from chiBuffer, // buffer to copy into coordBufSize, // col-row size of chiBuffer coordBufCoord, // top left dest. cell in chiBuffer &srctReadRect); // screen buffer source rectangle if (! fSuccess) { printf("ReadConsoleOutput failed - (%d)\n", GetLastError()); return 1; }else{printf("ReadConsoleOutput successfully - (%d)\n", GetLastError());} // Set the destination rectangle. srctWriteRect.Top = 10; // top lt: row 10, col 0 srctWriteRect.Left = 0; srctWriteRect.Bottom = 11; // bot. rt: row 11, col 79 srctWriteRect.Right = 79; // Copy from the temporary buffer to the new screen buffer. fSuccess = WriteConsoleOutput( hNewScreenBuffer, // screen buffer to write to chiBuffer, // buffer to copy from coordBufSize, // col-row size of chiBuffer coordBufCoord, // top left src cell in chiBuffer &srctWriteRect); // dest. screen buffer rectangle if (! fSuccess) { printf("WriteConsoleOutput failed - (%d)\n", GetLastError()); return 1; }else{printf("WriteConsoleOutput successfully - (%d)\n", GetLastError()); } Sleep(5000); // Restore the original active screen buffer. if (! SetConsoleActiveScreenBuffer(hStdout)) { printf("SetConsoleActiveScreenBuffer failed - (%d)\n", GetLastError()); return 1; }else{printf("SetConsoleActiveScreenBuffer successfully - (%d)\n", GetLastError()); } return 0;} #include #include int main(void) { HANDLE hStdo



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: