python - 重新启动软件最小化
问题描述
我运行 MediaPlayerClassic,作为任务栏中的最小化窗口(参见此处和其他答案),其中:
import subprocess, win32con, win32gui, win32process, win32api
info = subprocess.STARTUPINFO()
info.dwFlags = subprocess.STARTF_USESHOWWINDOW
info.wShowWindow = win32con.SW_MINIMIZE
app = subprocess.Popen(r'c:\path\to\mpc-h64.exe "d:\mp3\song.mp3"', startupinfo=info)
有用。但有时,我想用另一首替换当前正在播放的歌曲,并且我正在发送相同的先前代码(使用另一个 mp3)。
由于 MediaPlayerClassic 只允许 1 个实例,重新运行以前的代码确实会用新的替换当前正在播放的歌曲,这就是我想要的,所以它也可以。除了新窗口不再最小化。这可能是因为没有启动新进程:它重用了先前存在的进程,并且 MediaPlayerClassic 在接收到要播放的新 MP3 时“打开窗口”(?)。
添加:
time.sleep(0.2) # required, if not the next action happens before the MP3 changes
def callback(hwnd, hwnds):
text = win32gui.GetWindowText(hwnd)
if win32gui.GetClassName(hwnd) == 'MediaPlayerClassicW':
win32gui.ShowWindow(hwnd, win32con.SW_MINIMIZE)
return True
win32gui.EnumWindows(callback, [])
几乎解决了它,除了窗口快速闪烁然后最小化。
问题:如何像 MediaPlayerClassic 一样重新启动已经启动的 .exe 并使其最小化?应该在这里使用其他东西subprocess.Popen
吗?
解决方案
推荐阅读
- python - Python socket.io 在本地发出一个事件
- sql - 查询内容结果在多个 id 上左连接
- c# - 将 LINQ 从 C# 转换为 VB.NET 时出现问题
- python - 如何在类之间共享类方法?
- salesforce - 使用 SAQL / Einstein Analytics 计算费率
- mysql - MySQL中局部变量名的前缀下划线会导致问题吗?
- android - 使用 adreno 650 的 OpenCL 低性能
- r - 通过读取向量中的 url,输入中没有可用的行
- firebase - Algolia + Firestore:安全规则
- javascript - VueJS Computed 中的多个过滤器?