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

如何用Python锁定外部应用窗口以避免其自动最小化?

用Python实现外部应用窗口锁定,防止被覆盖时自动最小化

可以通过Python结合Windows API实现这个需求,核心思路是将目标窗口设置为始终置顶,同时可选禁用其最小化功能;若应用自身有强制最小化逻辑,还可通过定时检测恢复窗口状态。以下是具体实现步骤:

1. 依赖库安装

首先安装pywin32库,用于调用Win32窗口管理API:

pip install pywin32

2. 基础实现:锁定窗口为置顶状态

通过窗口标题获取目标应用的句柄,然后设置其始终置顶,并禁用最小化按钮:

import win32gui
import win32con

def lock_target_window(window_title):
    # 根据窗口标题查找窗口句柄
    hwnd = win32gui.FindWindow(None, window_title)
    if not hwnd:
        print(f"未找到标题为「{window_title}」的窗口")
        return
    
    # 设置窗口始终置顶(其他窗口无法覆盖它)
    win32gui.SetWindowPos(
        hwnd,
        win32con.HWND_TOPMOST,
        0, 0, 0, 0,
        win32con.SWP_NOMOVE | win32con.SWP_NOSIZE  # 不改变窗口位置和大小
    )
    
    # 禁用窗口的最小化按钮(可选,防止手动或应用自身触发最小化)
    current_style = win32gui.GetWindowLong(hwnd, win32con.GWL_STYLE)
    updated_style = current_style & ~win32con.WS_MINIMIZEBOX
    win32gui.SetWindowLong(hwnd, win32con.GWL_STYLE, updated_style)
    
    print("窗口已锁定,将保持在最上层且无法通过按钮最小化")

# 替换为你的目标应用窗口的精确标题
lock_target_window("目标应用窗口标题")

3. 进阶:处理应用强制最小化的情况

如果目标应用自身有逻辑,被覆盖时强制最小化,可添加定时检测,一旦窗口最小化就立即恢复并重新置顶:

import time

def keep_window_active(hwnd):
    while True:
        # 检查窗口是否处于最小化状态
        if win32gui.IsIconic(hwnd):
            # 恢复窗口到正常状态
            win32gui.ShowWindow(hwnd, win32con.SW_RESTORE)
            # 重新设置置顶
            win32gui.SetWindowPos(
                hwnd,
                win32con.HWND_TOPMOST,
                0, 0, 0, 0,
                win32con.SWP_NOMOVE | win32con.SWP_NOSIZE
            )
        time.sleep(1)  # 每秒检测一次

# 使用示例:先获取窗口句柄,再启动守护循环
# hwnd = win32gui.FindWindow(None, "目标应用窗口标题")
# if hwnd:
#     keep_window_active(hwnd)

4. 查找窗口句柄的辅助方法

如果不确定目标窗口的精确标题,可遍历所有可见窗口,获取它们的句柄和标题:

def enum_windows_callback(hwnd, window_list):
    if win32gui.IsWindowVisible(hwnd):
        title = win32gui.GetWindowText(hwnd)
        if title:
            window_list.append((hwnd, title))

def get_all_visible_windows():
    windows = []
    win32gui.EnumWindows(enum_windows_callback, windows)
    return windows

# 打印所有可见窗口信息
for hwnd, title in get_all_visible_windows():
    print(f"句柄: {hwnd} | 标题: {title}")

注意事项

  • 该方案仅适用于Windows系统,因为依赖Win32 API;
  • 若目标应用使用了自定义窗口框架,可能需要调整窗口句柄的获取方式(比如查找子窗口);
  • 长时间运行守护循环时,可考虑将其放入后台线程,避免阻塞主程序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 01:13:19