You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows 11传统控制台GetConsoleScreenBufferInfo返回值与实际窗口尺寸不符问题求助

Windows 11传统控制台GetConsoleScreenBufferInfo返回值与实际窗口尺寸不符问题求助

各位好,我在Windows 11的传统命令提示符(注意不是Windows Terminal)里运行程序时遇到了一个奇怪的兼容性问题,暂不确定旧版Windows是否存在这个情况。

我的设备是三显示器布局:其中一台横屏显示器设为主显示器,另外两台是竖屏。当我把控制台窗口拖到竖屏显示器上,然后把窗口拉得特别高——高到超过主显示器的高度时,运行程序就会触发这个问题;另外,把主显示器的分辨率调得比其他显示器小,也能复现同样的现象。

具体现象

  1. 运行程序前查看控制台的属性,显示的窗口/缓冲区数值是符合当前窗口实际大小的;
  2. 我用下面这段最小复现代码就能稳定触发问题:
HANDLE hConOut = INVALID_HANDLE_VALUE;
CONSOLE_SCREEN_BUFFER_INFO csbi;
COORD bufsize;
SMALL_RECT rect;

hConOut = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hConOut, &csbi);

bufsize.X = orig_scr.srWindow.Right - orig_scr.srWindow.Left + 1;
bufsize.Y = orig_scr.srWindow.Bottom - orig_scr.srWindow.Top + 1;

rect.Top = rect.Left = 0;
rect.Bottom = bufsize.Y - 1;
rect.Right = bufsize.X - 1;

SetConsoleScreenBufferSize(hConOut, bufsize);
SetConsoleWindowInfo(hConOut, TRUE, &rect);
  1. 执行完这段代码后,控制台窗口的物理尺寸会被自动缩小到能放进主显示器的大小,但此时调用GetConsoleScreenBufferInfo返回的信息却没有更新——还是维持着之前的大尺寸参数;
  2. 这就导致我的程序会往控制台不可见的区域输出内容。但只要我手动微调一下窗口的大小(哪怕只是稍微拉一下宽度),再调用这个API就能获取到正确的窗口尺寸了。

我的需求

现在我想知道:

  • 有没有办法修正这个问题,让GetConsoleScreenBufferInfo能正确返回实际的窗口尺寸?
  • 或者有没有办法检测到这种“窗口被系统强制缩小但API未同步”的状态?
  • 有没有其他方式可以获取到控制台窗口的真实可见尺寸,让程序能适配这个大小正常输出?

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 09:33:10