如何用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
相关产品推荐
相关产品推荐

