Перезапустить программное обеспечение свернуто - PullRequest
1 голос
/ 19 марта 2019

Я запускаю 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, [])

почти решает его, за исключением того, что окно быстро мигает, а затем минимизирует .

Вопрос: как перезапустить уже запущенный .exe, такой как MediaPlayerClassic, и сохранить его минимальным? Должно ли здесь использоваться что-то еще, кроме subprocess.Popen?

...