我使用的是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
答案 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