2016-10-27 1 views
0

JulMar (https://atapi.codeplex.com/)의 TAPI 2.0 래퍼를 사용하고 있는데 문제가 있습니다.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..."; 
    } 

OnCallInfo 그것은 단지 86와 함께 작동, somehwere 말한다, 그래서 대상하지만 여전히 성공을 바 꾸었습니다.

추 신 : 동일한 컴퓨터에 콜 매니저 (ProCall)가 설치되어 있는데, 누군가가 전화를하면 알려주기 때문에 C#으로 정보를 얻을 수 있어야합니다.

답변

1

http://pastebin.com/Q5W5iGun TSP에 따라이 정보 메시지를 전화를받을 수 있지만, TAPI이 작업을 수행하기 위해 드라이버를 강제로하지 않습니다 누군가가 관심이 있다면

여기에 전체 코드입니다. 따라서 일부 TSP를 사용하면 정보를 직접 얻을 수 있습니다. Win32 API에서이 작업은 lineGetCallInfo를 통해 수행됩니다.

이 atapi 래퍼를 간략히 살펴본 후 TapiCall 클래스의 GatherCallInfo 메서드에서이 문제가 발생합니다. 그러나이 래퍼에서 수동으로 트리거 할 수있는 방법이 없습니다. 이것을 공개 메소드로 만들려면 atapi 소스를 수정해야합니다.

+0

당신이'lineGetCallInfo'처럼 어떻게 보일지 공유시겠습니까 읽어? 나는 C#의 Listeners에도 상당히 익숙하다. 감사! – PrimuS

0

동일한 작업을 수행하는 TAPI의 예제를 사용할 수 있습니다. 유일한 차이는 더 읽기에 대한 새로운 line.Monitor() 메소드

foreach (TapiLine line in tapiManager.Lines) 
     { 
      try 
      { 
       line.NewCall += OnNewCall; 
       line.CallStateChanged += OnCallStateChanged; 
       line.CallInfoChanged += OnCallInfoChanged; 
       line.Monitor(); 
      } 
      catch (TapiException ex) 
      { 
       LogError(ex.Message); 
      } 
     } 

인이 https://atapi.codeplex.com/SourceControl/latest#Atapi/trunk/source/test/TcMon/TapiMonitorForm.cs

관련 문제