c# -使用TAPI(特别是TAPI3Lib)记录电话的长度
本文关键字:电话 记录 TAPI3Lib 使用 TAPI 特别是 | 更新日期: 2023-09-27 18:11:01
所以我在一个解决方案中内置了一个非常基本的TAPI函数,它可以给给定的号码打电话。我对TAPI代码不是特别强,并且想知道是否有任何方法可以使用c#函数记录电话长度?我最初的想法是,如果有一个呼叫开始和呼叫结束的手表事件,我可以分别开始和结束计时器,但文档似乎薄在冰上。
有人知道这是可能的吗?如果是,怎么做到的?
谢谢,瑞安
当前代码:全局变量:
TAPI3Lib.ITAddress line;
表单初始化代码:
public Outbound()
{
InitializeComponent();
#region TAPI Initialize
TAPIClass tapi = new TAPIClass();
tapi.Initialize();
foreach (TAPI3Lib.ITAddress ad in (tapi.Addresses as TAPI3Lib.ITCollection))
{
line = ad;
}
tapi.EventFilter = (int)(TAPI_EVENT.TE_CALLNOTIFICATION | //All events you could need, probably
TAPI3Lib.TAPI_EVENT.TE_CALLINFOCHANGE |
TAPI3Lib.TAPI_EVENT.TE_DIGITEVENT |
TAPI3Lib.TAPI_EVENT.TE_PHONEEVENT |
TAPI3Lib.TAPI_EVENT.TE_CALLSTATE |
TAPI3Lib.TAPI_EVENT.TE_GENERATEEVENT |
TAPI3Lib.TAPI_EVENT.TE_GATHERDIGITS |
TAPI3Lib.TAPI_EVENT.TE_REQUEST);
tapi.ITTAPIEventNotification_Event_Event += new TAPI3Lib.ITTAPIEventNotification_EventEventHandler(tapi_ITTAPIEventNotification_Event_Event);
#endregion
}
TAPI功能:
private void btncall_Click(object sender, EventArgs e)
{
if (line == null) return;
TAPI3Lib.ITBasicCallControl bc = line.CreateCall(txttelephone.Text, TAPI3Lib.TapiConstants.LINEADDRESSTYPE_PHONENUMBER, TAPI3Lib.TapiConstants.TAPIMEDIATYPE_AUDIO);
bc.Connect(false);
}
private void tapi_ITTAPIEventNotification_Event_Event(TAPI_EVENT TapiEvent, object pEvent)
{
try
{
switch (TapiEvent)
{
case TAPI3Lib.TAPI_EVENT.TE_CALLNOTIFICATION:
TAPI3Lib.ITCallNotificationEvent cn = pEvent as TAPI3Lib.ITCallNotificationEvent;
if (cn.Call.CallState == TAPI3Lib.CALL_STATE.CS_OFFERING)
{
string c = cn.Call.get_CallInfoString(TAPI3Lib.CALLINFO_STRING.CIS_CALLERIDNUMBER);
}
break;
}
}
catch (Exception ex)
{
}
}
SOLVED:所以我在文档中做了一些挖掘,我找到了一个方法。有一个名为TAPI3Lib.TAPI_EVENT.TE_CALLSTATE
的事件,如果您将其附加到监视器上,则可以跟踪调用状态是否发生变化。所以,对我来说,当一个电话开始和一个电话结束时,它就会被激活。我所要做的就是在这里控制一个带有标志的计时器,然后我将得到一个电话长度