我正在使用WSH重新实现与COM对象交互的简单win32com脚本(如果您必须知道的话是“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()事件?
发布于 2016-02-16 07:15:46
由于@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(),直到所有事件都被处理为止。
https://stackoverflow.com/questions/35412081
复制相似问题