You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python实现双窗口联动?使目标窗口跟随主窗口的各类行为

窗口联动完整实现方案

你原来的代码只处理了部分状态同步,要实现窗口B完全跟随窗口A的行为,得补上持续监听、位置同步这两个核心环节,同时优化状态同步逻辑。下面是可直接运行的完整代码:

from pywinauto.application import Application
import time

def anchor_windows(window_a, window_b):
    # 获取顶层窗口,避免操作子窗口
    win_a = window_a.top_level_parent()
    win_b = window_b.top_level_parent()

    # 同步窗口状态(最小化/最大化/正常)
    state_a = win_a.get_show_state()
    state_b = win_b.get_show_state()

    if state_a != state_b:
        if state_a == 2:  # 窗口A最小化
            win_b.minimize()
        elif state_a == 3:  # 窗口A最大化
            win_b.maximize()
        elif state_a == 1:  # 窗口A恢复正常
            win_b.restore()
        time.sleep(0.1)

    # 正常状态下同步位置:让B粘在A下方
    if state_a == 1 and state_b == 1:
        # 获取A的位置和尺寸
        rect_a = win_a.rectangle()
        # 获取B原有高度,只调整位置和宽度
        rect_b = win_b.rectangle()
        win_b.set_window_pos(
            x=rect_a.left,
            y=rect_a.top + rect_a.height(),
            width=rect_a.width(),
            height=rect_b.height(),
            repaint=True
        )

if __name__ == "__main__":
    # 连接到目标窗口(记事本和计算器)
    app_a = Application().connect(title="notepad", timeout=10)
    app_b = Application().connect(title="calc", timeout=10)

    # 持续监听并同步窗口行为
    try:
        while True:
            anchor_windows(app_a, app_b)
            time.sleep(0.2)  # 控制监听频率,平衡响应速度和资源占用
    except KeyboardInterrupt:
        print("监听已停止")

关键改进说明:

  • 持续监测:通过while循环持续跟踪窗口A的状态变化,确保任何操作都能实时同步到窗口B。
  • 状态同步优化:直接对比A和B的状态,不一致时立即同步,覆盖所有状态转换场景(最小化→最大化、正常→最小化等)。
  • 位置贴合逻辑:仅在窗口处于正常状态时调整位置,让B的左边缘与A对齐、顶部紧贴A的底部,宽度和A保持一致,完美实现“粘在下方”的效果。
  • 资源友好:0.2秒的循环间隔既保证响应及时,又不会过度占用CPU资源。

内容的提问来源于stack exchange,提问作者kudmich

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 19:10:17