我正在使用win32com
在python中重新实现与COM对象交互的简单WSH脚本(如果你必须知道,则为“CANalyzer.Application”)。我被阻止在脚本调用ConnectObject
方法将其处理程序绑定到COM对象事件的位置:
Set App = CreateObject("CANalyzer.Application")
Set Measurement = App.Measurement
Wscript.ConnectObject Measurement, "Measurement_"
Sub Measurement_OnInit()
Set TestFunction = App.CAPL.GetFunction("f")
End Sub
这个处理程序似乎是我可以合法地调用GetFunction
的唯一时刻,在处理程序之外调用它或者没有所需的效果或抛出异常:
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, None, None, None, 0, -2147418113), None)
我可以使用python中的ConnectObject
来绑定OnInit()
事件吗?
答案 0 :(得分:0)
感谢@JacobSeleznev,我发现了DispatchWithEvents()
方法:
class ApplicationEvents(object):
def OnQuit(self):
print("quitting")
app = win32com.client.DispatchWithEvents("CANalyzer.Application", ApplicationEvents)
还有一个WithEvents()
方法,在已经调用Dispatch()
后有条件地启用事件处理时非常有用:
app = win32com.client.Dispatch("CANalyzer.Application")
win32com.client.WithEvents(app, ApplicationEvents)
最后注意事项:为了实际调度事件,需要连续调用pythoncom.PumpWaitingMessages()
,直到所有事件都已处理完毕。