2016-10-27 71 views
0

我使用的是來自JulMar的TAPI 2.0包裝器(https://atapi.codeplex.com/),我遇到了麻煩。Atapi CallInfoChangeEvent未解僱

初始化

void initTAPI() 
    { 

     myTAPI = new TapiManager("GetCaller"); 

     if (!myTAPI.Initialize()) 
     { 
      MessageBox.Show("FAILED!"); 
     }else 
     { 
      name = myTAPI.Lines[0].Name; 
      lineName = (myTAPI != null && myTAPI.Lines.Length > 0 ? name : string.Empty); 

      foreach(TapiLine line in myTAPI.Lines) 
      { 
       line.NewCall += this.OnNewCall; 
       line.Ringing += this.OnRinging; 
       line.CallStateChanged += this.OnCallState; 
       line.CallInfoChanged += this.OnCallInfo; 
      } 

      MessageBox.Show(lineName); 

     } 
    } 

所以我得到的lineName。現在當我通過程序撥打一個號碼,它觸發

OnCallState

private void OnCallState(object sender, CallStateEventArgs e) 
    { 
     if (InvokeRequired == true) 
     { 
      this.BeginInvoke(new EventHandler<CallStateEventArgs>(this.OnCallState), new object[] { sender, e }); 
      return; 
     } 

     label1.Text = "Outgoing Call..."; 
    } 

但我真正想要做的是收到來電的號碼,但不會被解僱。

OnCallInfo

private void OnCallInfo(object sender, CallInfoChangeEventArgs e) 
    { 
     if (InvokeRequired == true) 
     { 
      this.BeginInvoke(new EventHandler<CallInfoChangeEventArgs>(this.OnCallInfo), new object[] { sender, e }); 
      return; 
     } 

     label1.Text = "Incoming Call..."; 
    } 

它說somehwere,它只能與x86的工作,所以我改變了目標,但仍然沒有成功。

PS:我有一個呼叫管理器(ProCall)安裝在同一臺機器上,告訴我什麼時候有人打電話,所以我應該可以在c#中獲得信息?

這裏是整個代碼,如果有人感興趣:http://pastebin.com/Q5W5iGun

回答

1

根據TSP,你可能會得到調用信息消息,但TAPI不強制司機做到這一點。所以一些TSP可以讓你自己獲得信息。在Win32 API中,這是通過lineGetCallInfo完成的。

快速查看此atapi包裝後,發生在TapiCall類的GatherCallInfo方法中。不過,我看不出在這個包裝中手動觸發這種方式。您需要修改atapi源以使其成爲公共方法。

+0

你不介意分享如何'lineGetCallInfo'會是什麼樣子?我對c#中的聽衆來說也是相當新穎的。謝謝! – PrimuS