如何在Python中直接调整窗口客户区大小?
如何用win32gui直接调整窗口客户区大小?
我可以使用win32gui.MoveWindow(hwnd, 0, 0, 100, 100, True)调整窗口大小,但不同电脑的窗口边框存在差异。是否存在可直接调整客户区大小的函数?
比如,我期望客户区尺寸为100×100,但win32gui.MoveWindow(hwnd, 0, 0, 100, 100, True)仅将窗口整体尺寸设为100×100,导致客户区尺寸小于100。
我尝试过通过窗口和客户区的矩形差值计算边框:
l1, t1, r1, b1 = win32gui.GetWindowRect(hwnd) l2, t2, r2, b2 = win32gui.GetClientRect(hwnd) client_h = b2 - t2 client_w = r2 - l2 border_l = ((r1 - l1) - (r2 - l2)) // 2 border_t = ((b1 - t1) - (b2 - t2)) - border_l
解决方案
Win32 API并没有直接设置客户区大小的函数,但可以通过两种可靠的方式间接实现:
方法1:通过窗口与客户区的尺寸差值计算
先获取当前窗口的外边界和客户区边界,计算出边框、标题栏的总额外尺寸,再反推出需要设置的窗口整体大小:
import win32gui def set_client_size(hwnd, target_client_w, target_client_h): # 获取当前窗口外矩形和客户区矩形 window_rect = win32gui.GetWindowRect(hwnd) client_rect = win32gui.GetClientRect(hwnd) # 计算窗口额外占用的尺寸(边框+标题栏) extra_w = (window_rect[2] - window_rect[0]) - (client_rect[2] - client_rect[0]) extra_h = (window_rect[3] - window_rect[1]) - (client_rect[3] - client_rect[1]) # 计算目标窗口整体尺寸 target_window_w = target_client_w + extra_w target_window_h = target_client_h + extra_h # 保持原窗口位置,设置新尺寸 win32gui.MoveWindow(hwnd, window_rect[0], window_rect[1], target_window_w, target_window_h, True)
方法2:使用AdjustWindowRect标准函数(推荐)
AdjustWindowRect是Win32提供的标准函数,它会根据窗口风格自动计算出适配目标客户区的窗口整体尺寸,适配不同系统的窗口样式更准确:
import win32gui import win32con def set_client_size(hwnd, target_client_w, target_client_h): # 获取窗口的风格参数 window_style = win32gui.GetWindowLong(hwnd, win32con.GWL_STYLE) # 定义目标客户区矩形 client_rect = win32gui.RECT() client_rect.left, client_rect.top = 0, 0 client_rect.right, client_rect.bottom = target_client_w, target_client_h # 计算所需的窗口外矩形(False表示窗口无菜单) win32gui.AdjustWindowRect(client_rect, window_style, False) # 提取窗口的宽度和高度 window_w = client_rect.right - client_rect.left window_h = client_rect.bottom - client_rect.top # 获取当前窗口位置,保持位置不变并设置新尺寸 current_pos = win32gui.GetWindowRect(hwnd) win32gui.MoveWindow(hwnd, current_pos[0], current_pos[1], window_w, window_h, True)
调用时只需传入窗口句柄和目标客户区的宽高即可,比如:
set_client_size(hwnd, 100, 100)
内容的提问来源于stack exchange,提问作者gokart
相关产品推荐
相关产品推荐

