每次我运行此代码时(在Win7上),控制台在两个方向上都减小1个字符。

int wmain( INT argc, WCHAR **argv )
{
    CONSOLE_SCREEN_BUFFER_INFOEX csbi;
    csbi.cbSize = sizeof(CONSOLE_SCREEN_BUFFER_INFOEX);
    GetConsoleScreenBufferInfoEx(GetStdHandle(STD_OUTPUT_HANDLE), &csbi);
    wprintf(L"Window: %u x %u\n", csbi.srWindow.Right - csbi.srWindow.Left + 1, csbi.srWindow.Bottom - csbi.srWindow.Top + 1);
    SetConsoleScreenBufferInfoEx(GetStdHandle(STD_OUTPUT_HANDLE), &csbi);
    return 0;
}

我怀疑这是预期的行为。是否有文件记录?在较新版本的Windows中是否更好?这是几次运行的片段。

p:\test\release> test.exe
视窗:99 x 41

p:\test\release> test.exe
视窗:98 x 40

p:\test\release> test.exe
视窗:97 x 39

最佳答案

Windows控制台API中长期存在的“无法修复”错误。
您只需要做其他人要做的事情,然后增加window.Bottom和window.Read之后就可以了。

GetConsoleScreenBufferInfoEx(GetStdHandle(STD_OUTPUT_HANDLE), &csbi)
++csbi.srWindowBottom;
++csbi.srWindowRight;

10-02 08:06