解决了
bool ReadConsoleIO()
{
// Get a handle to the STDOUT screen buffer to copy from and
// create a new screen buffer to copy to.
HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
if (!GetConsoleScreenBufferInfo(hStdout, &csbiInfo))
{
printf("GetConsoleScreenBufferInfo failed %d/n", GetLastError());
return false;
}
int nLines = csbiInfo.dwCursorPosition.X > 0 ?
csbiInfo.dwCursorPosition.Y + 1 : csbiInfo.dwCursorPosition.Y;
int nCharNums = nLines * csbiInfo.dwSize.X;
char *szBuf = new char[nCharNums + MAX_BUFFER];
ZeroMemory(szBuf, nCharNums + MAX_BUFFER);
char *pszSrc = szBuf;
BOOL bSuccess = FALSE;
// Set the source rectangle.
SMALL_RECT srctReadRect;
srctReadRect.Top = 0; // top left: row 0, col 0
srctReadRect.Left = 0;
srctReadRect.Bottom = nLines; // bot. right: row 1, col 79
srctReadRect.Right = csbiInfo.dwSize.X;
// The top left destination cell of the temporary buffer is
// row 0, col 0.
COORD coordBufCoord;
coordBufCoord.X = 0;
coordBufCoord.Y = 0;
COORD coordBufSize;
coordBufSize.Y = nLines; // rows
coordBufSize.X = csbiInfo.dwSize.X; // cols
CHAR_INFO *chiBuffer = new CHAR_INFO[nCharNums];
bSuccess = 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 (FALSE == bSuccess)
return false;
for (int i = 0; i < nCharNums; ++i)
{
if ((FOREGROUND_BLUE & chiBuffer[i].Attributes) &&
(FOREGROUND_GREEN & chiBuffer[i].Attributes) &&
(FOREGROUND_RED & chiBuffer[i].Attributes))
{
if ((chiBuffer[i].Attributes & COMMON_LVB_LEADING_BYTE) &&
(chiBuffer[i + 1].Attributes & COMMON_LVB_TRAILING_BYTE))
{
*szBuf++ = chiBuffer[i].Char.AsciiChar;
*szBuf++ = chiBuffer[++i].Char.AsciiChar;
}
else
{
*szBuf++ = (chiBuffer[i].Char.AsciiChar);
}
}
// add "/r/n"
if (0 == (i + 1) % csbiInfo.dwSize.X)
{
*szBuf++ = '/r';
*szBuf++ = '/n';
}
}
// show the standard output message
MessageBox(NULL, pszSrc, "ReadConsole", MB_OK);
if (NULL != pszSrc)
{
delete[] pszSrc;
pszSrc = NULL;
}
if (NULL != chiBuffer)
{
delete[] chiBuffer;
chiBuffer = NULL;
}
return true;
}
--
FROM 103.98.245.*