如何防止subprocess.Popen调用时抢占焦点(VS Code文件打开场景)
解决VS Code调用时抢占焦点的问题
首先明确:CREATE_NO_WINDOW参数仅用于隐藏新进程的控制台窗口,和窗口焦点激活无关,因此对你的场景不起作用。
下面提供两种可行的实现方式:
方式一:通过STARTUPINFO设置窗口不激活(推荐)
利用Windows API的STARTUPINFO结构体,指定启动VS Code时不激活窗口,需先安装pywin32库:
pip install pywin32
具体代码实现:
import subprocess import os import win32api import win32con # 构建STARTUPINFO,指定窗口不激活 startupinfo = win32api.STARTUPINFO() startupinfo.dwFlags |= win32con.STARTF_USESHOWWINDOW startupinfo.wShowWindow = win32con.SW_SHOWNOACTIVATE # 调用VS Code打开文件,注意去掉--new-window(--reuse-window已会复用现有窗口) subprocess.Popen( [ 'C:\\Users\\Captain_Dada\\AppData\\Local\\Programs\\Microsoft VS Code\\Code.exe', '--reuse-window', str(os.fspath(txtfile)) ], startupinfo=startupinfo )
方式二:恢复原窗口焦点
先记录当前激活的窗口,启动VS Code后再将焦点切回原窗口:
import subprocess import os import win32gui import time # 获取当前激活的窗口句柄 original_window = win32gui.GetForegroundWindow() # 调用VS Code打开文件 subprocess.Popen( [ 'C:\\Users\\Captain_Dada\\AppData\\Local\\Programs\\Microsoft VS Code\\Code.exe', '--reuse-window', str(os.fspath(txtfile)) ] ) # 短暂等待VS Code完成窗口激活操作,时间可根据系统性能调整 time.sleep(0.2) # 恢复原窗口焦点 win32gui.SetForegroundWindow(original_window)
内容的提问来源于stack exchange,提问作者Dada
相关产品推荐
相关产品推荐

