2016-02-15 48 views
0

我正在用win32com重新实现一个简单的WSH脚本与一个COM对象(如果你必须知道的话,“CANalyzer.Application”)交互。我挡在那里的脚本调用ConnectObject方法其处理程序绑定到COM对象的事件点:在python中是否有相当于WScript.ConnectObject的?

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) 

是否存在的ConnectObject在python等效我可以使用绑定到OnInit()事件?

+1

看看win32com.client.DispatchWithEvents –

+0

@JacobSeleznev谢谢,这真的有帮助。我希望我能找到一些关于'win32com'的在线文档,并避免提出基本问题,但是对'DispatchWithEvents win32com python'的搜索只会得到SO和邮件列表的链接。 –

回答

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

相关问题