#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.