我正在编写一个简单的程序,以字符/行的形式输出控制台的正确(和当前)宽度和高度。
#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 通常用作控制台。所以假设 STD_INPUT_HANDLE 不能被“GetConsoleScreenBufferInfo()”识别为“控制台句柄”。您可以使用“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");
}
关于C++ WinAPI - GetConsoleScreenBufferInfo 总是因句柄无效而失败(返回 0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53256389/