有没有最简单的办法实现控制MODEM,1:提取出来电号码,2:检测到振铃后挂机,用MSCOMM如何实现? ( 积分: 100 )

  • 主题发起人 主题发起人 xhuhuasoft
  • 开始时间 开始时间
X

xhuhuasoft

Unregistered / Unconfirmed
GUEST, unregistred user!
有没有最简单的办法控制MODEM,1:提取出来电号码,2:检测到振铃后挂机,
可以用MSCOMM如何实现吗?如何实现
 
有没有最简单的办法控制MODEM,1:提取出来电号码,2:检测到振铃后挂机,
可以用MSCOMM如何实现吗?如何实现
 
听听课!
 
知不知道超级终端是怎么做的?它可以接受来电
 
我也要搞这方面的..
 
可以的,网上有这种程序你可以找一下。是可以实现的。
 
我做过这方面的,不过不是用mscomm,是用APRO控件的,用这个控件很方便的
 
要诊测电话号码当然你要开通来电显示的业务否则没办法获取的~~^_^
 
-_ -对不起我的话好像总不能一句说完
如果不希望用APRO控件的话用TAPI也可以实现,不过麻烦了点,其实APRO控件电话操作部分就是封装了TAPI
 
在网上找了apro的组件,写出来的界面很漂亮,但是读出的CALLID还是UNKNOW。不知道有哥们用过APRO的经验没有,来分享一下,注:我用超级终端读来电显示很好的。
 
用 TAPI 完全可以做到.............
不过代码比较麻烦..我做过.......

一个小例子

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, tapi, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Label1: TLabel;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
LineApp: THLineApp; // 2003-10-28 用于TAPI 的
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
buf:array[0..1023] of char;
callinfo: TLineCallInfo absolute buf;
Line: THLine;
hCall: THCall;
GetCallerID : String ;
implementation

{$R *.dfm}
//回调函数处理消息
procedure lineCallback(hDevice, dwMsg, dwCallbackInstance,
dwParam1, dwParam2, dwParam3: LongInt);
{$IFDEF WIN32}
stdcall;
{$ELSE}
export;
{$ENDIF}

begin
Case dwMsg of
//1
LINE_REPLY : // 测试线路情况
begin
if dwParam2 < 0 then
begin
Form1.Memo1.Lines.Add('出错事件: 线路测试错误!,请找技术人员!_1');
//电话连接的出错处理------------------------------------------
// ShowMessage('出错事件: 线路测试错误!,请找技术人员!_1')
end;
end;
//2
LINE_MONITORDIGITS : //在这里接收电话按键
begin
Form1.Memo1.Lines.Add(Chr(dwparam1));
// 加入接收电话按键的代码
end;
//3
LINE_CALLINFO : // 取的CallerID
begin
//Log

if dwParam1 = LINECALLINFOSTATE_CALLERID then
begin
//Log
CallInfo.dwTotalSize := 4096;
LineGetCallInfo(hCall,CallInfo);
if CallInfo.dwCallerIDSize > 0 then
GetCallerID := buf+callinfo.dwCallerIDOffset
else
GetCallerID := '9999999'; // 无来电话显示码

Form1.Memo1.Lines.Add(GetCallerID);
end;
end;
// 4
LINE_CALLSTATE : // 线路状态改变
begin
//Log

hCall := THCall(hDevice);
case dwParam1 of
//0001
LINECALLSTATE_OFFERING:
begin
lineMonitorDigits(hCall,LINEDIGITMODE_DTMF);
Form1.Memo1.Lines.Add('Ringing');
end;
//0002
LINECALLSTATE_IDLE: //呼叫终止处于空闲状态
begin
if hcall <> 0 then
begin
lineDeallocateCall(hCall); //重新分配监视呼叫句柄
Form1.Memo1.Lines.Add('重新分配监视呼叫句柄');
end;
end;
//0003
LINECALLSTATE_CONNECTED: //已经连接
begin
Form1.Memo1.Lines.Add('已经连接');
end;
//004
LINECALLSTATE_DISCONNECTED: //断开连接
begin
LineDrop(hcall, nil, 0) ;

Form1.Memo1.Lines.Add('断开连接');
end;
end;
end;
end;// 结束 Case dwMsg of
end;


// 初始化
procedure TForm1.Button1Click(Sender: TObject);
var
nDevs, tapiVersion: Longint;
extid: TLineExtensionID;
TTLineDevStatus : TLineDevStatus ;
Get_ModemID : Integer ; // 取的modem的ID,用于LineOpen的第二个参数
OpenFile:TextFile; // 取的modem的ID
begin
// 取的modem 的ID
Get_ModemID := 0;

//初始化TAPI
if lineInitialize(lineApp, HInstance,lineCallback, nil, nDevs) < 0 then
lineApp := 0
else
if nDevs = 0 then
begin
lineShutDown(lineApp);
lineApp := 0;
end
else
if lineNegotiateAPIVersion(lineApp,0, $00010000, $10000000,tapiVersion, extid) <> 0 then
begin
lineShutDown(lineApp);
lineApp := 0;
end
else
if lineOpen(lineApp, Get_ModemID, line, tapiVersion, 0, 0,
LINECALLPRIVILEGE_MONITOR+LINECALLPRIVILEGE_OWNER, LINEMEDIAMODE_INTERACTIVEVOICE, nil) < 0 then
begin
lineShutDown(lineApp);
lineApp := 0;
line := 0;
end;

if lineApp = 0 then
begin
//电话连接的出错处理------------------------------------------
ShowMessage('初始化Modem错误!请找技术人员。');
Exit ;
end;
end;

// 接线
procedure TForm1.Button2Click(Sender: TObject);
begin
LineAnswer(hCall,nil,0);
end;

// 断线
procedure TForm1.Button3Click(Sender: TObject);
begin
LineDrop(hcall, nil, 0);
end;

end.
 
我这有个完整的自动语音应答的Demo不过是APRO老版本的(新版本不支持检测挂机),是董占山写的书里面带的
要的给我发email:songyx0◎126.com
 
老兄,用apro吧,几行代码就搞定了,很好用的,
去年我也做了一个和你一样的东东,不过没买钱,送人了,现在代码也不知去那了,
最好用apro功能很强大,你需要的功能它全有,并且apro是免费控件,全世界通用哟
 
我用apro做的怎么也收不到主叫,老是CALLID=UNKNOW,你是如何在这个控件初始化前运行
AT+clip=1.收到主叫的呢?
 
这个问题也是我想知道的啊!
 
AT+CLCC 列出当前的呼叫;
一个VB的例子,用于手机来电显示 (key1 为一布尔值):
Dim rs As Variant '接收串口数据缓冲区

Select Case MSComm1.CommEvent
Case comEvSend
Case comEvCD
Case comEvReceive ' 数据接收处理
On Error Resume Next


rs = MSComm1.Input
InBuf1 = InBuf1 + rs
' Text1.Text = Text1.Text + rs

If InStr(InBuf1, &quot;RING&quot;) > 0 Then '设定挂机前响铃数

If key1 = False Then
MSComm1.Output = &quot;at+clcc&quot; &amp; Chr(13)
key1 = True
End If
End If


If InStr(InBuf1, &quot;OK&quot;) > 0 Then

If InStr(InBuf1, &quot;at+clcc&quot;) > 0 Then
Text2.Text = Mid(InBuf1, InStr(InBuf1, &quot;,129&quot;) - 12, 11) '显示来电号码
InBuf1 = &quot;&quot; '还能截断座机号码区号加座机号同手机位数一样
Timer1.Interval = 6000
End If

If InStr(InBuf1, &quot;ath&quot;) > 0 Then '发送挂断当前电话命令
InBuf1 = &quot;&quot;
key1 = False
End If

End If

End Select


附:AT指令

一、 一般命令
1、 AT+CGMI 给出模块厂商的标识。
2、 AT+CGMM 获得模块标识。这个命令用来得到支持的频带(GSM 900,DCS 1800 或PCS 1900)。当模块有多频带时,回应可能是不同频带的结合。
3、 AT+CGMR 获得改订的软件版本。
4、 AT+CGSN 获得GSM模块的IMEI(国际移动设备标识)序列号。
5、 AT+CSCS 选择TE特征设定。这个命令报告TE用的是哪个状态设定上的ME。ME于是可以转换每一个输入的或显示的字母。这个是用来发送、读取或者撰写短信。
6、 AT+WPCS 设定电话簿状态。这个特殊的命令报告通过TE电话簿所用的状态的ME。ME于是可以转换每一个输入的或者显示的字符串字母。这个用来读或者写电话簿的入口。
7、 AT+CIMI 获得IMSI。这命令用来读取或者识别SIM卡的IMSI(国际移动签署者标识)。在读取IMSI之前应该先输入PIN(如果需要PIN的话)。
8、 AT+CCID 获得SIM卡的标识。这个命令使模块读取SIM卡上的EF-CCID文件。
9、 AT+GCAP 获得能力表。(支持的功能)
10、 A/ 重复上次命令。只有A/命令不能重复。这命令重复前一个执行的命令。
11、 AT+CPOF 关机。这个特殊的命令停止GSM软件堆栈和硬件层。命令AT+CFUN=0的功能与+CPOF相同。
12、 AT+CFUN 设定电话机能。这个命令选择移动站点的机能水平。
13、 AT+CPAS 返回移动设备的活动状态。
14、 AT+CMEE 报告移动设备的错误。这个命令决定允许或不允许用结果码“+CME ERROR:<xxx>”或者“+CMS ERROR:<xxx>”代替简单的“ERROR”。
15、 AT+CKPD 小键盘控制。仿真ME小键盘执行命令。
16、 AT+CCLK 时钟管理。这个命令用来设置或者获得ME真实时钟的当前日期和时间。
17、 AT+CALA 警报管理。这个命令用来设定在ME中的警报日期/时间。(闹铃)
18、 AT+CRMP 铃声旋律播放。这个命令在模块的蜂鸣器上播放一段旋律。有两种旋律可用:到来语音、数据或传真呼叫旋律和到来短信声音。
19、 AT+CRSL 设定或获得到来的电话铃声的声音级别。
二、 呼叫控制命令
1、 ATD 拨号命令。这个命令用来设置通话、数据或传真呼叫。
2、 ATH 挂机命令。
3、 ATA 接电话。
4、 AT+CEER 扩展错误报告。这个命令给出当上一次通话设置失败后中断通话的原因。
5、 AT+VTD 给用户提供应用GSM网络发送DTMF(双音多频)双音频。这个命令用来定义双音频的长度(默认值是300毫秒)。
6、 AT+VTS 给用户提供应用GSM网络发送DTMF双音频。这个命令允许传送双音频。
7、 ATDL 重拨上次电话号码。
8、 AT%Dn 数据终端就绪(DTR)时自动拨号。
9、 ATS0 自动应答。
10、 AT+CICB 来电信差。
11、 AT+CSNS 单一编号方案。
12、 AT+VGR,AT+VGT 增益控制。这个命令应用于调节喇叭的接收增益和麦克风的传输增益。
13、 AT+CMUT 麦克风静音控制。
14、 AT+SPEAKER 喇叭/麦克风选择。这个特殊命令用来选择喇叭和麦克风。
15、 AT+ECHO 回音取消。
16、 AT+SIDET 侧音修正。
17、 AT+VIP 初始化声音参数。
18、 AT+DUI 用附加的用户信息拨号。
19、 AT+HUI 用附加的用户信息挂机。
20、 AT+RUI 接收附加用户信息。
三、 网络服务命令
1、 AT+CSQ 信号质量。
2、 AT+COPS 服务商选择。
3、 AT+CREG 网络注册。获得手机的注册状态。
4、 AT+WOPN 读取操作员名字。
5、 AT+CPOL 优先操作员列表。
四、 安全命令
1、 AT+CPIN 输入PIN。
2、 AT+CPIN2 输入PIN2。
3、 AT+CPINC PIN的剩余的尝试号码。
4、 AT+CLCK 设备锁。
5、 AT+CPWD 改变密码。
五、 电话簿命令
1、 AT+CPBS 选择电话簿记忆存储。
2、 AT+CPBR 读取电话簿表目。
3、 AT+CPBF 查找电话簿表目。
4、 AT+CPBW 写电话簿表目。
5、 AT+CPBP 电话簿电话查询。
6、 AT+CPBN 电话簿移动动作。这个特殊命令使电话簿中的条目前移或后移(按字母顺序)
7、 AT+CNUM 签署者号码。
8、 AT+WAIP 防止在下一次重起时初始化所有的电话簿。
9、 AT+WDCP 删除呼叫电话号码。
10、 AT+CSVM 设置语音邮件号码。
六、 短消息命令
1、 AT+CSMS 选择消息服务。支持的服务有GSM-MO、SMS-MT、SMS-CB。
2、 AT+CNMA 新信息确认应答。
3、 AT+CPMS 优先信息存储。这个命令定义用来读写信息的存储区域。
4、 AT+CMGF 优先信息格式。执行格式有TEXT方式和PDU方式。
5、 AT+CSAS 保存设置。保存+CSAS和+CSMP的参数。
6、 AT+CRES 恢复设置。
7、 AT+CSDH 显示文本方式的参数。
8、 AT+CNMI 新信息指示。这个命令选择如何从网络上接收短信息。
9、 AT+CMGR 读短信。信息从+CPMS命令设定的存储器读取。
10、 AT+CMGL 列出存储的信息。
11、 AT+CMGS 发送信息。
12、 AT+CMGW 写短信息并存储。
13、 AT+CMSS 从存储器中发送信息。
14、 AT+CSMP 设置文本模式的参数。
15、 AT+CMGD 删除短信息。删除一个或多个短信息。
16、 AT+CSCA 短信服务中心地址。
17、 AT+CSCB 选择单元广播信息类型。
18、 AT+WCBM 单元广播信息标识。
19、 AT+WMSC 信息状态(是否读过、是否发送等等)修正。
20、 AT+WMGO 信息覆盖写入。
21、 AT+WUSS 不改变SMS状态。在执行+CMGR或+CMGL后仍保持UNREAD。
七、 追加服务命令
1、 AT+CCFC 呼叫继续。
2、 AT+CLCK 呼叫禁止。
3、 AT+CPWD 改变追加服务密码。
4、 AT+CCWA 呼叫等待。
5、 AT+CLIR 呼叫线确认限制。
6、 AT+CLIP 呼叫线确认陈述。
7、 AT+COLP 联络线确认陈述。
8、 AT+CAOC 费用报告。
9、 AT+CACM 累计呼叫计量。
10、 AT+CAMM 累计呼叫计量最大值。
11、 AT+CPUC 单价和货币表。
12、 AT+CHLD 呼叫相关的追加服务。
13、 AT+CLCC 列出当前的呼叫。
14、 AT+CSSN 追加服务通知。
15、 AT+CUSD 无组织的追加服务数据。
16、 AT+CCUG 关闭的用户组。
八、 数据命令
1、 AT+CBST 信差类型选择。
2、 AT+FCLASS 选择模式。这个命令把模块设置成数据或传真操作的特殊模式。
3、 AT+CR 服务报告控制。这个命令允许更为详细的服务报告。
4、 AT+CRC 划分的结果代码。这个命令在呼叫到来时允许更为详细的铃声指示。
5、 AT+ILRR 本地DTE-DCE速率报告。
6、 AT+CRLP 无线电通信线路协议参数。
7、 AT+DOPT 其他无线电通信线路参数。
8、 AT%C 数据压缩选择。
9、 AT+DS 是否允许V42二度数据压缩。
10、 AT+DR 是否报告V42二度数据压缩。
11、 AT/N 数据纠错选择。
九、 传真命令
1、 AT+FTM 传送速率。
2、 AT+FRM 接收速率
3、 AT+FTH 用HDLC协议设置传真传送速率。
4、 AT+FRH 用HDLC协议设置传真接收速率。
5、 AT+FTS 停止特定时期的传送并等待。
6、 AT+FRS 接收沉默。
十、 第二类传真命令
1、 AT+FDT 传送数据。
2、 AT+FDR 接收数据。
3、 AT+FET 传送页标点。
4、 AT+FPTS 页转换状态参数。
5、 AT+FK 终止会议。
6、 AT+FBOR 页转换字节顺序。
7、 AT+FBUF 缓冲大小报告。
8、 AT+FCQ 控制拷贝质量检验。
9、 AT+FCR 控制接收传真的能力。
10、 AT+FDIS 当前会议参数。
11、 AT+FDCC 设置DCE功能参数。
12、 AT+FLID 定义本地ID串。
13、 AT+FPHCTO 页转换超时参数。
十一、V24-V25命令
1、 AT+IPR 确定DTE速率。
2、 AT+ICF 确定DTE-DCE特征结构。
3、 AT+IFC 控制DTE-DCE本地流量。
4、 AT&amp;C 设置DCD(数据携带检测)信号。
5、 AT&amp;D 设置DTR(数据终端就绪)信号。
6、 AT&amp;S 设置DST(数据设置就绪)信号。
7、 ATO 回到联机模式。
8、 ATQ 决定手机是否发送结果代码。
9、 ATV 决定DCE响应格式。
10、 ATZ 恢复为缺省设置。
11、 AT&amp;W 保存设置。
12、 AT&amp;T 自动测试。
13、 ATE 决定是否回显字符。
14、 AT&amp;F 回到出厂时的设定。
15、 AT&amp;V 显示模块设置情况。
16、 ATI 要求确认信息。这命令使GSM模块传送一行或多行特定的信息文字。
17、 AT+WMUX 数据/命令多路复用。
十二、特殊AT命令
1、 AT+CCED 电池环境描述。
2、 AT+CCED 自动RxLev指示。
3、 AT+WIND 一般指示。
4、 AT+ALEA 在ME和MSC之间的数据密码模式。
5、 AT+CRYPT 数据密码模式。
6、 AT+EXPKEY 键管理。
7、 AT+CPLMN 在PLMN上的信息。
8、 AT+ADC 模拟数字转换度量。
9、 AT+CMER 移动设备事件报告。这个命令决定是否允许在键按下时是否主动发送结果代码。
10、 AT+WLPR 读取语言偏好。
11、 AT+WLPW 写语言偏好。
12、 AT+WIOR 读取GPIO值。
13、 AT+WIOW 写GPIO值。
14、 AT+WIOM 输入/输出管理。
15、 AT+WAC 忽略命令。这个特殊命令允许忽略SMS、SS和可用的PLMN。
16、 AT+WTONE 播放旋律。
17、 AT+WDTMF 播放DTMF旋律。
18、 AT+WDWL 下载模式。
19、 AT+WVR 配置信差的声音速率。
20、 AT+WDR 配置数据速率。
21、 AT+WHWV 显示硬件的版本。
22、 AT+WDOP 显示产品的出厂日期。
23、 AT+WSVG 声音增益选择。
24、 AT+WSTR 返回指定状态的状态。
25、 AT+WSCAN 扫描。
26、 AT+WRIM 设置或返回铃声指示模式。
27、 AT+W32K 是否允许32kHz掉电方式。
28、 AT+WCDM 改变缺省旋律。
29、 AT+WSSW 显示内部软件版本。
30、 AT+WCCS 编辑或显示订制性质设置表。
31、 AT+WLCK 允许在特定的操作符上个性化ME。
32、 AT+CPHS 设置CPHS命令。
33、 AT+WBCM 电池充电管理。
34、 AT+WFM 特性管理。是否允许模块的某些特性,如带宽模式、SIM卡电压等。
35、 AT+WCFM 商业特性管理。是否允许Wavecom特殊特性。
36、 AT+WMIR 允许从当前存储的参数值创建定制的存储镜像。
37、 AT+WCDP 改变旋律的缺省播放器。
38、 AT+WMBN 设置SIM卡中的不同邮箱号码。
十三、SIM卡工具箱命令
1、 AT+STSF 配置工具箱实用程序。
2、 AT+STIN 工具箱指示。
3、 AT+STGI 获得从SIM卡发来的预期命令的信息。
4、 AT+STCR 主动提供的结果:工具箱控制反应。
5、 AT+STGR 给出响应。允许程序或用户从主菜单上选择项目,或响应某些命令。
 
楼上的兄弟,不如提供一下DELPHI下面的代码把,急!!
 
没有试过我的代码吗?是可以的啊....详细可以看看TAPI的说明..关于 Modem 的也..我建议还是直接用 TAPI好..TAPI 说明全是英文的..不过应该不是好难的...
 
TO gooodlife, 请问一下 TAPI 单元在哪里可以得到??? 我 uses tapi; 编译时提示没有找到 tapi.dcu 文件.

谢谢.
 
后退
顶部