我正在编写一个简单的程序,以字符/行的形式输出控制台的正确(和当前)宽度和高度。

#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");
  }

08-24 19:26