【问题标题】:WindowsContext: OleInitialize() failed: "COM error 0x80010106 RPC_E_CHANGED_MODE (Unknown error 0x0ffffffff80010106)"WindowsContext:OleInitialize() 失败:“COM 错误 0x80010106 RPC_E_CHANGED_MODE(未知错误 0x0ffffffff80010106)”
【发布时间】:2018-12-19 10:09:35
【问题描述】:

我在 windows 8 中使用 python 3.4.4(32 位)编程。我正在使用 PyQt5 运行应用程序,该应用程序运行良好,但由于我安装了 pywinauto 0.6.4 以将重点放在其他应用程序:

other_app = pywinauto.Application().connect(process=int(code))
other_app.top_window().set_focus()

如果我运行My_app = QApplication(sys.argv),在控制台中会出现下一条警告消息,没有其他信息:

QWindowsContext: OleInitialize() failed:  "COM error 0x80010106 RPC_E_CHANGED_MODE (Unknown error 0x0ffffffff80010106)"
SetProcessDpiAwareness failed: "COM error 0x80070005  (Unknown error 0x0ffffffff80070005)"

我怀疑这是因为 pywinautoPyQt5.QtWidgets.QApplication 模块之间存在冲突。在“警告”之后程序运行良好,但我现在仍然不知道如何修复它。

这是最小、完整和可验证的示例:

from PyQt5.QtWidgets import QApplication
import pywinauto
import sys


def main():
    app = QApplication(sys.argv)
    app.exec_()


if __name__ == '__main__':
    main()

【问题讨论】:

  • 谢谢。问题的最后是 Minimal Complete and Verifiable example。
  • 在 Win8.1 和 Py3.7 上使用 matplotlib.pyplot 时遇到同样的错误。

标签: python pyqt5 pywinauto


【解决方案1】:

尝试用这种方式导入:

from PyQt5 import QtWidgets
...
app = QtWidgets.QApplication(sys.argv)
w = QMainWindow()
w.show()
app.exec_()

这对我有用。

【讨论】:

  • 欢迎来到 Stackoverflow。请解释您的答案,为什么它可以解决问题以及如何解决。
【解决方案2】:

根据这个post,一种解决方法是使用sys.coinit_flags = 2 和警告模块。

import sys
import warnings
warnings.simplefilter("ignore", UserWarning)
sys.coinit_flags = 2
import pywinauto
from PyQt5.QtWidgets import QApplication, QMainWindow


def main():
    app = QApplication(sys.argv)
    w = QMainWindow()
    w.show()
    app.exec_()


if __name__ == '__main__':
    main()

【讨论】:

  • 在我的情况下,程序确实也没有明显的原因崩溃了,但这修复了它。谢谢!
  • 我面临着类似的问题,但使用的是 pyside2 lib。以上解决方案不适用于我的代码。 :(
猜你喜欢
  • 2017-11-19
  • 1970-01-01
  • 1970-01-01
  • 2020-01-12
  • 1970-01-01
  • 2013-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多