C++ WinAPI - GetConsoleScreenBufferInfo 总是因句柄无效而失败(返回 0)

标签 c++ windows winapi

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

#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/

相关文章:

windows - 通过批量创建新文件而不覆盖旧文件

winapi - 同步 WinHTTP 请求的异步回调调用

c - list 文件中的 requestExecutionLevel 和 CopyFile() 函数失败

c++ - 最小化全屏窗口的最佳方法

c++ - 如何在自定义 DirectShow 过滤器中以秒为单位获得正确的帧时间?

windows - 如何使用管道将一个命令的输出重定向到另一个命令的输入?

c++ - 静态成员初始化期间访问私有(private)静态函数

C# - 如何从 static void main 调用方法

c# - 需要在 c# 中制作 .lib、.h 和 .dll 的包装器

c++ - boost ASIO streambuf