WindowsContext: ошибка OleInitialize(): "ошибка COM 0x80010106 RPC_E_CHANGED_MODE (неизвестная ошибка 0x0ffffffff80010106)"

Я программирую на python 3.4.4 (32 бита), в Windows 8. Я запускаю приложение с 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)"

Я подозреваю, что это потому, что существует конфликт между pywinauto и PyQt5.QtWidgets.QApplication модули. После "предупреждения" программа работает хорошо, но я до сих пор не знаю, как это исправить.

Это минимальный, полный и проверяемый пример:

from PyQt5.QtWidgets import QApplication
import pywinauto
import sys


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


if __name__ == '__main__':
    main()

3 ответа

Согласно этому посту, обходной путь должен использовать 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. В моем случае порядок импорта имел значение. А именно, я использовал

      import clr

который нужно поставить после

      app = QApplication(sys.argv)

Попробуйте импортировать таким образом:

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

У меня это работает.

Другие вопросы по тегам