python如何实现电脑桌面分屏?
可设置几个区域,不同区域可拖入不同的窗口
网友回复
下面先给出一个 Windows 版的最小可用示例:拖动任意窗口松手后,会自动吸附到预设的区域(类似 PowerToys FancyZones 的核心逻辑)。
思路
预设若干“区域”(矩形)
监听系统窗口拖动结束事件(Move/Size End)
判断所拖窗口的中心点/重叠面积落在哪个区域
调用 SetWindowPos 把窗口移动/缩放到该区域
Windows 最小示例(纯 Python,无第三方库)
功能:默认把主屏工作区分为 2×2 四个分屏。你拖动窗口并松手,它会吸附到对应区域。
运行环境:Windows 10/11,Python 3.x
权限建议:若想捕获/控制提权窗口,最好以管理员权限运行
# -*- coding: utf-8 -*-
# Windows: 拖动窗口松手后自动吸附到预设区域(2x2 网格)
import ctypes
from ctypes import wintypes
user32 = ctypes.windll.user32
# 常量
EVENT_SYSTEM_MOVESIZESTART = 0x000A
EVENT_SYSTEM_MOVESIZEEND = 0x000B
WINEVENT_OUTOFCONTEXT = 0x0000
WINEVENT_SKIPOWNPROCESS = 0x0002
OBJID_WINDOW = 0
GA_ROOT = 2
SWP_NOZORDER = 0x0004
SWP_NOACTIVATE = 0x0010
SWP_SHOWWINDOW = 0x0040
SPI_GETWORKAREA = 0x0030
SW_RESTORE = 9
# 结构体
class RECT(ctypes.Structure):
_fields_ = [
("left", wintypes.LONG),
("top", wintypes.LONG),
("right", wintypes.LONG),
("bottom", wintypes.LONG),
]
# 函数声明(可选但更稳)
user32.GetWindowRect.argtypes = [wintypes.HWND, ctypes.POINTER(RECT)]
user32.GetWindowRect.restype = wintypes.BOOL
user32.SetWindowPos.argtypes = [wintypes.HWND, wintypes.HWND,
ctypes.c_int, ctypes.c_int, ctypes.c_int, ctypes.c_int,
wintypes.UINT]
user32.SetWindowPos.restype = wintypes.BOOL
user32.SystemParametersInfoW.argtypes = [wintypes.UINT, wintypes.UINT,
ctypes.c_void_p, wintypes.UINT]
user32.SystemParametersInfoW.restype = wintypes.BOOL
user32.GetAncestor.argtypes = [wintypes.HWND, wintypes.UINT]
user32.GetAncestor.restype = wintypes.HWND
user32.IsWindowVisible.argtypes = [wintypes.HWND]
user32.IsWindowVisible.restype = wintypes.BOOL
user32.IsIconic.argtypes = [wintypes.HWND]
user32.IsIconic.restype = wintypes.BOOL
user32.IsZoomed.argtypes = [wintypes.HWND]
user32.IsZoomed.restype = wintypes.BOOL
user32.ShowWindow.argtypes = [wintypes.HWND, ctypes.c_int]
user32.ShowWindow.restype = wintypes.BOOL
# 工具函数
def get_work_area():
r = RECT()
user32.SystemParametersInfoW(SPI_GETWORKAREA, 0, ctypes.byref(r), 0)
return r
def build_grid_zones(wa_rect, cols=2, rows=2, gap=12):
zones = []
w = wa_rect.right - wa_rect.le...点击查看剩余70%
有没有免费让ai自动帮你接管操作电脑的mcp服务?
mcp为啥用Streamable HTTP 替代 HTTP + SSE?
scratchjr有没有开源的前端html网页版本源代码?
多模态大模型能否根据ui交互视频来来模仿写出前端交互动画效果ui代码?
如何用阿里云oss+函数计算fc+事件总线EventBridge+消息队列+数据库+redis缓存打造一个高并发弹性系统?
阿里云函数计算 FC如何在海外节点搭建一个代理网络?
ai studio中gemini build的代码如何发布到github pages等免费网页托管上 ?
如何在cursor、qoder、trae中使用Claude Skills功能?
有没有不用u盘就能重装系统的开源工具?
python如何固定摄像头实时计算停车场停车位剩余数量?


