You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 03:05:02