首页 > 解决方案 > 重新启动软件最小化

问题描述

我运行 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吗?

标签: pythonwindowswinapiwin32guihwnd

解决方案


推荐阅读