Исключение PyGetWindowException, если я не включу window.minimize() и window.maximize() до window.activate()

#python #windows #pywin32

Вопрос:

Я получаю ошибку исключения pygetwindow, за которой следует код «Ошибка» из Windows, утверждающий, что операция была успешно завершена:

 File "C:UsersUserAppDataLocalProgramsPythonPython38-32libsite-packagespygetwindow_pygetwindow_win.py", line 246, in activate_raiseWithLastError()
  File "C:UsersUserAppDataLocalProgramsPythonPython38-32libsite-packagespygetwindow_pygetwindow_win.py", line 99, in _raiseWithLastError
    raise PyGetWindowException('Error code from Windows: %s - %s' % (errorCode, _formatMessage(errorCode)))
pygetwindow.PyGetWindowException: Error code from Windows: 0 - The operation completed successfully.
 

только если я не включу методы минимизации и максимизации перед вызовом activate.

Например, следующее работает нормально;

 def switchFirefoxPlaybackState():
    #pause/unpause open youtube video

    #set active window to Firefox
    win = gw.getWindowsWithTitle('Firefox')[0]
    win.minimize()
    win.maximize()
    win.activate()

    #simulate k key to pause youtube video
    wsh = comclt.Dispatch("WScript.Shell")
    wsh.SendKeys("k")

    #reset active window to VLC
    win = gw.getWindowsWithTitle('VLC media player')[0]
    win.activate()
 

В моей основной функции у меня есть

 playbackState = True

def main():

global playbackState
sessions = AudioUtilities.GetAllSessions()

for session in sessions:

    volume = session._ctl.QueryInterface(ISimpleAudioVolume)

    if (session.Process and session.Process.name() == "firefox.exe"):
        print("Grabbed Firefox")

        if (getVLCState() == "paused"):

            print("VLC is paused")
            #change Firefox volume to 1
            print("volume.GetMasterVolume(): %s" % volume.GetMasterVolume())
            volume.SetMasterVolume(1.0, None)

            if not playbackState:
                 switchFirefoxPlaybackState()
                 playbackState = True

        elif (getVLCState() == "playing"):

            print("VLC is playing")
            #change Firefox volume to 0
            print("volume.GetMasterVolume(): %s" % volume.GetMasterVolume())
            volume.SetMasterVolume(0.0, None)

            if playbackState:
                switchFirefoxPlaybackState()
                playbackState = False

time.sleep(1)
 

Интересно, что если код в основной функции закомментирован, функция switchFirefoxPlaybackState будет работать независимо от того, включены ли методы минимизации и максимизации до активации. Но если switchFirefoxPlaybackState включен в основную функцию (после проверки состояния VLC), то и только тогда методы максимизации/минимизации, по-видимому, имеют значение.

The obvious solution is to just include the minimize and maximize methods. The issue with that is I can see the window minimize and maximize and it’s a bit annoying.