C ++ WinAPI - GetConsoleScreenBufferInfo всегда завершается ошибкой из-за неверного дескриптора (возвращает 0) - PullRequest
0 голосов
/ 12 ноября 2018

Я пишу простую программу для вывода правильной (и текущей) ширины и высоты консоли в символах / строках.

#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. У меня возникает ощущение, что я могу быть либо над головой, либо пытаться сделать что-то слишком специфичное для системы.

Заранее спасибо за любые решения / альтернативы.

1 Ответ

0 голосов
/ 13 ноября 2018

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");
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...