如何在Python脚本中控制Windows shell窗口的大小?

3
当从Windows启动一个脚本类型的Python文件时,你会得到一个Windows shell类型的窗口,在该窗口中运行脚本。如何确定和设置/控制该窗口的窗口大小、屏幕缓冲区大小和窗口位置?我怀疑可以使用pywin32模块来实现,但我找不到方法。

不清楚您是要求窗口在桌面上的位置(这就是我要找的内容),还是要求窗口相对于“屏幕缓冲区”的位置(可以使用下面给出的“SetConsoleWindowInfo”函数来完成)。 - Rainald62
1个回答

12

您可以使用来自win32 API的SetConsoleWindowInfo函数来实现此操作。以下代码应该可以正常工作:

from ctypes import windll, byref
from ctypes.wintypes import SMALL_RECT

STDOUT = -11

hdl = windll.kernel32.GetStdHandle(STDOUT)
rect = wintypes.SMALL_RECT(0, 50, 50, 80) # (left, top, right, bottom)
windll.kernel32.SetConsoleWindowInfo(hdl, True, byref(rect))

更新:

窗口位置基本上是通过上面的rect变量设置left,top,right,bottom参数来确定的。实际大小是由这些参数派生出来的:

width = right - left + 1
height = bottom - top + 1

要设置屏幕缓冲区的大小,例如100行80列,可以使用SetConsoleScreenBufferSize API:

bufsize = wintypes._COORD(100, 80) # rows, columns
windll.kernel32.SetConsoleScreenBufferSize(h, bufsize)

这段代码可以设置窗口大小。你能否提供屏幕缓冲区大小和窗口位置的代码?我对ctypes和win32 API的了解为零。 - LtPinback
标准输出(STDOUT)实际上不应该是-11吗? - user136036
@user136036 感谢您指出并提供参考资料;现已修复。 - ars
我认为你需要添加类似于import ctypes.wintypes as wintypes的内容,以使rect = wintypes.SMALL_RECT(0, 50, 50, 80)正常工作... - martineau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接