【发布时间】:2018-11-12 05:31:28
【问题描述】:
我正在编写一个简单的程序,以字符/行的形式输出控制台的正确(和当前)宽度和高度。
#include <iostream>
#include <Windows.h>
using namespace std;
int main()
{
CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
GetConsoleScreenBufferInfo(GetStdHandle(STD_INPUT_HANDLE), &csbiInfo);
cout << csbiInfo.dwSize.X;
cout << csbiInfo.srWindow.Bottom - csbiInfo.srWindow.Top;
system("PAUSE");
}
但是,虽然 GetStdHandle 不返回 INVALID_HANDLE_VALUE,但 GetConsoleScreenBufferInfo 失败(返回 0),错误代码为 0x6(无效句柄)
我也尝试过使用 GetConsoleWindow();代替 GetStdHandle 无效。
我使用的是 Windows 10 和 VS2017。我觉得我可能是在我的头上,或者推动做一些过于系统特定的事情。
提前感谢您提供任何解决方案/替代方案。
【问题讨论】:
-
如果你使用
STD_OUTPUT_HANDLE而不是输入句柄会发生什么? -
"最初,STDIN 是控制台输入缓冲区的句柄,STDOUT 和 STDERR 是控制台活动屏幕缓冲区的句柄"
-
"Input" 和 "screen buffer" 没有重叠。如果您想知道在屏幕缓冲区的一行中可以输出多少个字符,您将不得不使用输出句柄。