我正在尝试使用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时,它被解释为宽度。
此行为是否正常或是否有错误?