如何修复pygetwindow调用.activate时出现的0号成功码异常?
问题
当对一组特定标题的窗口数组执行.activate()方法时,周期性抛出如下异常:
File "C:\Users\sakan\PycharmProjects\BIC\window_variable.py ", line 10, in <module> cmd_window[0].activate() File "C:\Users\sakan\AppData\Local\Programs\Python\Python312\Lib\site-packages\pygetwindow_pygetwindow_win.py", line 246, in activate __raiseWithLastError() File "C:\Users\sakan\AppData\Local\Programs\Python\Python312\Lib\site-packages\pygetwindow_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 - Operation completed successfully.
注:操作的窗口存在光标无法移出边界的情况,脚本已通过管理员权限在CMD中运行。
解决方案
- 捕获异常并忽略误报:错误码0表示Windows实际执行成功,只是pygetwindow的错误处理逻辑误触发了异常。可以针对性捕获该异常,不中断流程:
import pygetwindow as gw try: cmd_window[0].activate() except gw.PyGetWindowException as e: if "Error code from Windows: 0" in str(e): pass else: raise - 改用Windows API直接激活:绕开pygetwindow的
activate()方法,使用pywin32库调用系统API,稳定性更高:import win32gui import win32con # 获取目标窗口的句柄 hwnd = cmd_window[0]._hWnd # 若窗口最小化则先恢复 if win32gui.IsIconic(hwnd): win32gui.ShowWindow(hwnd, win32con.SW_RESTORE) # 将窗口设为前台 win32gui.SetForegroundWindow(hwnd) - 先调整窗口状态再激活:光标无法移出边界通常是窗口处于全屏或锁定光标模式,激活前先恢复窗口为普通状态:
# 先恢复窗口为非全屏/非最小化状态 cmd_window[0].restore() # 再执行激活 cmd_window[0].activate()
内容的提问来源于stack exchange,提问作者Art_pp
相关产品推荐
相关产品推荐

