2013-10-17 114 views
1

我尝试TAPI COM对象与事件的Python TAPI COM对象

import win32com.client 
class TapiEvents: 
    pass 

tapi = win32com.client.DispatchWithEvents("{21D6D48E-A88B-11D0-83DD-00AA003CCABD}",TapiEvents) 

使用win32com.client.DispatchWithEvents但它给出了一个错误: 此COM对象不支持事件。

回答

1

工作示例看上去像(与CiscoTSP工作)

import win32com.client 
cls="TAPI.TAPI.1" 
# need for gen_py 
ti = win32com.client.Dispatch(cls)._oleobj_.GetTypeInfo() 
tlb, index = ti.GetContainingTypeLib() 
tla = tlb.GetLibAttr() 
win32com.client.gencache.EnsureModule(tla[0], tla[1], tla[3], tla[4], bValidateFile=0) 

class TapiEvents(win32com.client.getevents(cls)): 
    def OnEvent(self, ev1,ev2): 
     print "OnEvent" 

tapi=win32com.client.Dispatch(cls) 
tapi.Initialize() # must run after Dispatch and before TapiEvents 
events=TapiEvents(tapi) 
tapi.EventFilter = 0x1FFFF 

for addr in tapi.Addresses: 
    try: 
     tapi.RegisterCallNotifications(addr,True,True,8,0) 
    except: 
     pass 

import Tix 
r=Tix.Tk() 
r.mainloop() 

为了使呼叫使用

import win32com.client,time 
tapi = win32com.client.Dispatch("TAPI.TAPI.1") 
tapi.Initialize() 
for item in tapi.Addresses: print item.AddressName 
objCrtAddress = [item for item in tapi.Addresses if 'SEP' in item.AddressName][0] 
sNumber='323' 
gobjCall = objCrtAddress.CreateCall(sNumber, 1, 0x8) 
gobjCall.Connect (False) 
+0

感谢这么多的例子,这是我能找到的最好迄今使用Python中的TAPI,你有更多的提示,我可以找到更多的像:你怎么知道你必须将tapi.EventFilter = 0x1FFFF设置为这个值,你过滤哪些事件? – select

+1

我很高兴我的例子很有用。谢谢你,@选择。 我很难找到信息。 在Python中的例子我还没有找到。 这里有一些与C++,C#和VB中的例子的链接,这有助于我理解(更多的VB)。 [tapi.info](http://www.tapi.info/default.aspx/TAPI/PSDKSamples.html)(example ** calldemo.htm **帮助了我很多) 'tapi.EventFilter = 0x1FFFF'也在这个例子中。 [msdn](http://code.msdn.microsoft.com/TAPI-3-in-C-Get-Lines-and-dd143eaf)如果您有任何问题,请告诉我,我会尽力提供帮助。 – Arty