python中是否有WScript.ConnectObject的等价物?
我正在使用python中是否有WScript.ConnectObject的等价物?,python,python-3.x,com,win32com,wsh,Python,Python 3.x,Com,Win32com,Wsh,我正在使用win32com在python中重新实现一个与COM对象交互的简单脚本(“CANalyzer.Application”,如果您必须知道的话)。我在脚本调用方法将其处理程序绑定到COM对象事件时被阻止: Set App = CreateObject("CANalyzer.Application") Set Measurement = App.Measurement Wscript.ConnectObject Measurement, "Measurement_" Sub Measure
win32com
在python中重新实现一个与COM对象交互的简单脚本(“CANalyzer.Application”,如果您必须知道的话)。我在脚本调用方法将其处理程序绑定到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()
事件?多亏了@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()
,直到处理完所有事件。查看win32com.client。DispatchWithEvents@JacobSeleznev谢谢,这真的很有帮助。我希望我能找到一些关于win32com
的在线文档,避免问一些基本问题,但通过谷歌搜索DispatchWithEvents win32com python
只会得到SO和邮件列表的链接。