我正在编写一个简单的程序,以字符/行的形式输出控制台的正确(和当前)宽度和高度。
#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_INPUT_HANDLE通常连接到终端键盘。
STD_OUTPUT_HANDLE和STD_ERROR_HANDLE通常用作控制台。因此,可以说“GetConsoleScreenBufferInfo()”无法将STD_INPUT_HANDLE标识为“控制台句柄”。您可以使用“STD_OUTPUT_HANDLE”来获取控制台句柄。
#include <iostream>
#include <Windows.h>
using namespace std;
int main()
{
CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbiInfo);
cout << csbiInfo.dwSize.X;
cout << csbiInfo.srWindow.Bottom - csbiInfo.srWindow.Top;
system("PAUSE");
}