我将MediaPlayerClassic作为任务栏中的最小化窗口运行(也请参见here和其他答案),
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
以外的其他名称?