在python中是否有等效的WScript.ConnectObject?

时间:2016-02-15 14:35:53

标签: python python-3.x com win32com wsh

我正在使用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()事件吗?

1 个答案:

答案 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(),直到所有事件都已处理完毕。