2016-02-15 62 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(),直到處理完所有事件。

相關問題