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

如何用Python关闭子进程启动的Windows应用可见窗口?

在Windows上用Python彻底关闭UWP应用(如计算器)的解决方案

Windows 10/11的计算器属于UWP(通用Windows平台)应用,你用subprocess.Popen(["calc"])启动的只是一个轻量启动器进程,真正渲染窗口的是另一个独立的UWP进程。所以调用p.terminate()或p.kill()只会杀死启动器,不会影响实际的应用窗口。以下是几种可行的解决方案:

方法1:用taskkill命令强制关闭

借助Windows内置的taskkill工具,通过窗口标题或进程名直接终止目标应用:

import subprocess
import time

# 启动计算器
subprocess.Popen(["calc"])
time.sleep(2)

# 方案A:按窗口标题关闭(计算器的默认标题是"计算器")
subprocess.run(["taskkill", "/F", "/FI", "WindowTitle eq 计算器"])

# 方案B:按进程名关闭(UWP计算器的进程名是Calculator.exe)
# subprocess.run(["taskkill", "/F", "/IM", "Calculator.exe"])

参数说明:

  • /F:强制终止进程
  • /FI:按筛选条件匹配(这里指定窗口标题)
  • /IM:按进程名匹配

方法2:用pywin32通过窗口句柄关闭

先安装依赖:pip install pywin32,然后通过窗口标题找到句柄,发送系统关闭消息:

import subprocess
import time
import win32gui
import win32api
import win32con

def close_window_by_title(title):
    hwnd = win32gui.FindWindow(None, title)
    if hwnd:
        # 发送标准窗口关闭消息
        win32api.SendMessage(hwnd, win32con.WM_CLOSE, 0, 0)

# 启动计算器
subprocess.Popen(["calc"])
time.sleep(2)

# 关闭标题为"计算器"的窗口
close_window_by_title("计算器")

这种方法更精准,不会误杀其他同名进程。

方法3:用psutil追踪关联进程关闭

先安装依赖:pip install psutil,通过父进程(启动器)找到所有关联的子进程并终止:

import subprocess
import time
import psutil

# 启动计算器
p = subprocess.Popen(["calc"])
time.sleep(2)

# 终止所有子进程(包含实际的计算器进程)
for child in psutil.Process(p.pid).children(recursive=True):
    child.kill()
# 终止启动器进程
p.kill()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 21:40:32