TAPI监测不到来电,怎么办呀?
遇到第一个问题是监测不到是否有电话打进来了。
设备:
window2000server, vc6.0, smart 56k voice modem。
modem的line上接普通电话线,是内线电话,不知道和这个是不是有关系。
代码
BOOL Initialize()
{
DWORD dwDevNum = 0;
LINEEXTENSIONID lineExt;
lErrorCode = ::lineInitialize(&m_hLineApp,
::AfxGetApp()->m_hInstance,
lineCallbackFunc, "TapiModem", &dwDevNum);
if (lErrorCode < 0)
{
GetErrorString(lErrorCode);
return FALSE;
}
if (dwDevNum == 0)
return FALSE;
for (m_dwModemID = 0; m_dwModemID < dwDevNum; m_dwModemID++)
{
lErrorCode = ::lineNegotiateAPIVersion(m_hLineApp, m_dwModemID, TAPI_LOW_VERSION,
TAPI_CURRENT_VERSION, &m_dwAPIVersion, &lineExt);
if (lErrorCode < 0)
{
GetErrorString(lErrorCode);
return FALSE;
}
if (CheckLineCap(m_dwModemID, m_dwAPIVersion))
break;
}
if (m_dwModemID == dwDevNum)
return FALSE;
lErrorCode = ::lineOpen(m_hLineApp, m_dwModemID, &m_hLine,
m_dwAPIVersion, 0, 0,
LINECALLPRIVILEGE_MONITOR + LINECALLPRIVILEGE_OWNER,
LINEMEDIAMODE_DATAMODEM | LINEMEDIAMODE_AUTOMATEDVOICE |
LINEMEDIAMODE_INTERACTIVEVOICE | LINEMEDIAMODE_UNKNOWN
, NULL);
if (lErrorCode < 0)
{
GetErrorString(lErrorCode);
return FALSE;
}
lErrorCode = ::lineSetNumRings(m_hLine, 0, 0);
if (lErrorCode < 0)
{
GetErrorString(lErrorCode);
return FALSE;
}
return TRUE;
}
void CALLBACK lineCallbackFunc( DWORD dwDevice,
DWORD dwMessage,
DWORD dwCallbackInstance,
DWORD dwParam1,
DWORD dwParam2,
DWORD dwParam3 )
{
switch (dwMessage)
{
case LINE_CALLSTATE: // review the call state messages
{
m_hCall = (HCALL)dwDevice;
switch( dwParam1 )
{
case LINECALLSTATE_OFFERING:
{
//TapiStatus("新的呼叫...");
Answer();
}
break;
case LINECALLSTATE_IDLE:
{
TapiStatus("空闲...");
LONG lErrorCode = ::lineDeallocateCall(m_hCall);
if (lErrorCode < 0)
{
GetErrorString(lErrorCode);
}
m_hCall = NULL;
}
break;
case LINECALLSTATE_CONNECTED: // hey, we got through!
{
TapiStatus("Connected");
}
break;
case LINECALLSTATE_BUSY:
{
TapiStatus("线路正忙,关闭...");
HangupCall( );
}
break;
case LINECALLSTATE_DISCONNECTED:
{
TapiStatus("disconnected");
HangupCall( );
}
break;
}
break;
}
case LINE_MONITORDIGITS:
{
CString szDigit;
szDigit.Format("%c", dwParam1);
MessageBox(NULL, szDigit, "digit", MB_OK);
break;
}
} // switch
} // TapiCallBack()
如果收到offering消息, answer应该执行, 现在只写了一个messagebox在answer里边,提示来电话了。
我用别的电话拨这台电脑,可以听到电话接通,等待应答时的“嘟嘟"声。
开始modem的phone线接了电话,电话会响,后来把电话拔了。
不管怎样都可以听到电话接通,等待应答时的“嘟嘟"声,但是程序总是没有发现来电话了。
问题在哪里呀?监测不到电话,下边的工作就没有办法开始,帮忙呀, 分不够可以令开帖加
email: kittig@163.com
相关推荐
TAPI通信实例(63KB)
TAPI通信实例(63KB)
Project TAPI-开源
使用Windows Telephony Application Programming Interface通过Delphi(现在为D4-D7)创建自己的TAPI CTI程序。
Ipoffice项目源码
avaya ipoffice 程序代码实现部分
hbTapi Components 2012 v2.3 - Enterprise Edition - Full Source.7z
hbTapi Components 2012 v2.3 - Enterprise Edition - Full Source.7z
AmTapi ActiveX控件(Pro Edition)
<br> AmTapi ActiveX控件 是一个兼容TAPI的电话控件,TAPI是电话学API(Telephony API),由Intel和Microsoft共同开发,是32位Windows版本标准。TAPI能在一个广泛的电话硬件平台上实现彼此之间的电话设备共享,提供处理不同媒体声音,数据等信息的共同方法。<br><br> AmTapi ActiveX控件 能进行电话呼叫和回答电话,检测呼叫者ID,检测远程DTMF音调,生成DTMF音调,列举已安装的电话设备,根据用户的设置翻译电话号码等。<br><br> AmTapi ActiveX控件(Professional Edition)的特点: 呼叫者ID:姓名,电话和标志; 被叫者ID:姓名,电话和标志; 监测SIT音调 回答电话 挂断电话 呼叫过程信息和呼叫状态 翻译电话号码 打电话:拨打全部或部分号码 产生DTMF:0-9, *, #, A-D 检测DTMF音调;呼叫特权:所有者,监控者,所有者+监控者 媒体模式:交互式语音,自动语音,数据,传真 数据Modems的波特率 区域会话:Windows拨号属性会话 列举区域名称; 获取/设置当前区域; 获取当前国家代码; 获取当前区号 列举国家名 电话设备/modem 设置对话 获取/设置当前有线设备 发现硬件设备性能 列举已安装的电话/modem设备 获取/设置当前设置信息 使用amWave录制和播放WAVE文件 打开串口 电话喇叭控制:扬声器,麦克风 喇叭音量控制 本地电话按钮检测; 支持终端模式; 静音监测; 用硬件设备直接通讯; 兼容.NET。


