为什么在Windows中使用GetConsoleScreenBufferInfoEx时控制台窗口会缩小?

时间:2016-06-16 04:16:07

标签: python winapi command-line colors console

我正在尝试使用GetConsoleScreenBufferInfoEx和SetConsoleScreenBufferInfoEx来设置Windows命令行控制台的背景和前景色。

我正在使用wintypes在Python中完成它,并且它可以正常工作。

但是有一些奇怪的事情发生了:每次通话时窗口都会缩小一点。

这就是调用代码的样子:

def GetConsoleScreenBufferInfoEx(handle):
    csbi = CONSOLE_SCREEN_BUFFER_INFOEX()  # a structure
    csbi.cbSize = 96  # needs to be set
    success = _GetConsoleScreenBufferInfoEx(  # just a wrap
        handle, byref(csbi))
    return csbi

csbi = GetConsoleScreenBufferInfoEx(handle)
csbi.wAttributes = color
SetConsoleScreenBufferInfoEx(csbi)

现在,每当我改变颜色时,窗口也会缩小。

我可以通过添加

来修复它
csbi.srWindow.Right += 1  # otherwise the window will shrink
csbi.srWindow.Bottom += 1
在SetConsoleScreenBufferInfoEx(csbi)之前

CONSOLE_SCREEN_BUFFER_INFOEX结构按预期定义,不会更改任何值。

看起来GetConsoleScreenBufferInfoEx函数返回最后一个索引,所以当窗口宽度为80时csbi.srWindow.Right为79.但是当将相同的值传递给SetConsoleScreenBufferInfoEx时,它被解释为宽度。

此行为是否正常或是否有错误?

0 个答案:

没有答案