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

