Порты Python для win32com

В скрипте Python я должен заменить использование comtypes на win32com и pythoncom. По сути, у меня есть этот код:

from comtypes.client import CreateObject, GetEvents

object_IXXObjManager = comtypes.client.CreateObject(xxxId)
connection_IXXObjManager = GetEvents(object_IXXObjManager, IXXObjManagerEventHandler())

object_IXXObjCommunications = object_IXXObjManager.QueryInterface(comtypes.gen.XXOBJLib.IXXObjCommunications)
connection_IXXObjCommunications = GetEvents(object_IXXObjCommunications, IXXObjCommunicationEventHandler(), interface=comtypes.gen.XXOBJLib.IXXObjCommunicationsEvents)

и цель состоит в том, чтобы получить подобную функциональность, используя win32com. В моем понимании классы обработчиков событий не потребуют никаких изменений. Первая часть была легкой:

import win32com.client
object_IXXObjManager = win32com.client.Dispatch(xxxId)
event_IXXObjManager = win32com.client.WithEvents(object_IXXObjManager, IXXObjManagerEventHandler) 

Однако я застрял при попытке сопоставить обработчик событий с объектом из запрашиваемого интерфейса.

object_IXXObjManager._oleobj_.QueryInterface( ??? )

Не могли бы вы помочь мне? У меня есть общий опыт разработки SW, но ограниченные знания COM.

Спасибо!

1 ответ

Решение

Замена для

object_IXXObjCommunications = object_IXXObjManager.QueryInterface(comtypes.gen.XXOBJLib.IXXObjCommunications)

может быть так:

iface = object_XXObjManager._oleobj_.QueryInterface(pythoncom.IID_IDispatch)
iface_Communications = win32com.client.CastTo(iface,"XXObjCommunications")
connection_XXObjCommunications = win32com.client.Dispatch(iface_Communications)
Другие вопросы по тегам