Atapi CallInfoChangeEvent未被解雇

时间:2016-10-27 15:15:33

标签: c# tapi

我使用的是JulMar(https://atapi.codeplex.com/)的TAPI 2.0包装器,我遇到了麻烦。

初始化

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不会被解雇。

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...";
    }

它说有些,它只适用于x86,所以我改变了目标,但仍然没有成功。

PS:我在同一台机器上安装了一个呼叫管理器(ProCall),告诉我有人打电话,所以我应该能够在c#中获取信息吗?

如果有人感兴趣,请输入以下代码:http://pastebin.com/Q5W5iGun

2 个答案:

答案 0 :(得分:1)

根据TSP,您可能会收到呼叫信息消息,但TAPI不会强制驱动程序执行此操作。所以一些TSP让你自己获得信息。在Win32 API中,这是通过lineGetCallInfo完成的。

快速浏览一下这个atapi包装器后,会发生在TapiCall类的GatherCallInfo方法中。但是我看不到在这个包装器中手动触发它的方法。您需要修改atapi源以使其成为公共方法。

答案 1 :(得分: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