WindowsContext:OleInitialize()失败:“ COM错误0x80010106 RPC_E_CHANGED_MODE(未知错误0x0ffffffff80010106)”

时间:2018-07-11 11:24:37

标签: python pyqt5 pywinauto

我正在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()

2 个答案:

答案 0 :(得分:4)

根据此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()

答案 1 :(得分:0)

尝试以这种方式导入:

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

这对我有用。