2015-10-28 5 views
2

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

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(???) 

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

Спасибо!

+0

я портировал начальную часть кода: 'object_IXXObjManager = win32com.client.Dispatch (xxxId) event_IXXObjManager = win32com. client.WithEvents (object_IXXObjManager, IXXObjManagerEventHandler) ', но я предполагаю, что мне нужно добавить также нечто вроде' object_IXXObjManager._oleobj_.QueryInterface (???) ', которое я точно не знаю, как это сделать. – skotka

ответ

2

Замена для

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)