急求用mscomm控件从modem中得来显的代码,我找了好多都不成功。

54993699 2003-12-05 11:39:45
我的是内modem,在com3口上,线是先进modem在输出到电话上。来电以开通。
用at指令返回是ok,可是从memo上得到的结果全是PING,没有电话号码,我是看论坛里的一遍文章做的。不成功。求求个位谁有例子给一个。分可以在开个帖加100,
信箱:ljf963852741@etang.com
...全文
135 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
54993699 2003-12-07
  • 打赏
  • 举报
回复
非常感谢大家,问题我一个朋友帮我解决了。他告诉我让猫有来电先决条件是原装驱动。果然我用联想的原装就能得到电话。原来的驱动是我在驱动之家下的。结帖了。分不多。给大家分了。
westfly 2003-12-07
  • 打赏
  • 举报
回复
unit Exanswe0;

interface

uses
WinTypes, WinProcs, SysUtils, Messages, Classes, Graphics, Controls,
Forms, Dialogs, AdPort, StdCtrls, Buttons, OoMisc, AdMdm;

type
TForm1 = class(TForm)
ListBox1: TListBox;
BitBtn1: TBitBtn;
ApdComPort1: TApdComPort;
AdModem1: TAdModem;
procedure FormCreate(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure AdModem1ModemCallerID(Modem: TAdCustomModem;
CallerID: TApdCallerIDInfo);
procedure AdModem1ModemConnect(Modem: TAdCustomModem);
procedure AdModem1ModemDisconnect(Modem: TAdCustomModem);
procedure AdModem1ModemFail(Modem: TAdCustomModem; FailCode: Integer);
procedure AdModem1ModemLog(Modem: TAdCustomModem;
LogCode: TApdModemLogCode);
procedure AdModem1ModemStatus(Modem: TAdCustomModem;
ModemState: TApdModemState);
private
{ Private declarations }
public
{ Public declarations }
procedure AddStatus(const Msg : String);
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.AddStatus(const Msg : String);
begin
Listbox1.Items.Add(Msg);
Listbox1.ItemIndex := Pred(Listbox1.Items.Count);
end;

procedure TForm1.FormCreate(Sender: TObject);
{Event OnCreate from TForm1}
begin
ApdComPort1.Open := True;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
{Begin answering in two rings}
begin
AdModem1.AnswerOnRing := 2;
AdModem1.AutoAnswer;
end;

procedure TForm1.AdModem1ModemCallerID(Modem: TAdCustomModem;
CallerID: TApdCallerIDInfo);
{ we received caller id information }
begin
//来电事件
AddStatus('CallerID Name: ' + CallerID.Name);
AddStatus('CallerID Number: ' + CallerID.Number);
end;

procedure TForm1.AdModem1ModemConnect(Modem: TAdCustomModem);
{ we are connected }
begin
AddStatus('Connected!');
end;

procedure TForm1.AdModem1ModemDisconnect(Modem: TAdCustomModem);
{ we have been disconnected }
begin
AddStatus('Disconnected');
end;

procedure TForm1.AdModem1ModemFail(Modem: TAdCustomModem;
FailCode: Integer);
begin
AddStatus('Failed: ' + Modem.FailureCodeMsg(FailCode));
end;

procedure TForm1.AdModem1ModemLog(Modem: TAdCustomModem;
LogCode: TApdModemLogCode);
begin
AddStatus('Log event: ' + Modem.ModemLogToString(LogCode));
end;

procedure TForm1.AdModem1ModemStatus(Modem: TAdCustomModem;
ModemState: TApdModemState);
begin
AddStatus('Status event: ' + Modem.ModemStatusMsg(ModemState));
end;

end.

//----dfm文件
object Form1: TForm1
Left = 251
Top = 173
Width = 433
Height = 300
Caption = 'ExAnswer'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlack
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = True
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object ListBox1: TListBox
Left = 8
Top = 8
Width = 409
Height = 147
IntegralHeight = True
ItemHeight = 13
TabOrder = 0
end
object BitBtn1: TBitBtn
Left = 8
Top = 232
Width = 409
Height = 33
Caption = 'Click here to Begin Answering'
TabOrder = 1
OnClick = BitBtn1Click
end
object ApdComPort1: TApdComPort
Tracing = tlOn
TraceName = 'APD.TRC'
Logging = tlOn
LogName = 'APD.LOG'
Left = 8
Top = 196
end
object AdModem1: TAdModem
ComPort = ApdComPort1
ModemCapFolder = '{MODEMCAPINDEX}'
OnModemCallerID = AdModem1ModemCallerID
OnModemConnect = AdModem1ModemConnect
OnModemDisconnect = AdModem1ModemDisconnect
OnModemFail = AdModem1ModemFail
OnModemLog = AdModem1ModemLog
OnModemStatus = AdModem1ModemStatus
Left = 40
Top = 196
end
end
54993699 2003-12-06
  • 打赏
  • 举报
回复
我试过用vb写的软件,也没有,是不是我的猫有问题??
我还听说来显有两种制式。用at发指令在从串口读应和这个没有关系吧。
westfly 2003-12-06
  • 打赏
  • 举报
回复
你的电话要开通来显功能才行。
自己用AT指令控制太累了吧?
建议用APRO的TApdTApiDevice, 可以直接得到callerID(电话号码)
直接用AT的话设一下+VCID=1启用呼叫者标识功能
hacking 2003-12-06
  • 打赏
  • 举报
回复
可能是你的线路收码的时候,噪音比较大,你换个电话试一下,换个局
因为电话局和电话局的设备不一样,应该是在第一震铃和第二次震零间发DTMF码,但是有的时候由于间隔或者噪音太大,回有收不到码的情况,或者你用别人编写好的程序在你的电话上试一下,看看是否情况一样
54993699 2003-12-06
  • 打赏
  • 举报
回复
开通了呀,我的电话原来有来电显,每月多交6元钱呢,难道这个开通来电不是么??
还有别的要开通???
我以发 MSComm1.Output:='at+vcid=1'+#13;
返回ok了呀,就是没有电话号,只有ring
54993699 2003-12-06
  • 打赏
  • 举报
回复
谢谢先,这个我是第一个试的,只能得到ping at说明上说是得到号音,唉,好气人呀。
是不是我的猫不行呀,我的猫是从联想机上拿下来的。2001年买的。
ycdelphicsdn 2003-12-06
  • 打赏
  • 举报
回复
这段程序可是好使的呀
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, MSCommLib_TLB, StdCtrls,StrUtils;

type
TForm1 = class(TForm)
MSComm1: TMSComm;
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure MSComm1Comm(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
if not self.MSComm1.PortOpen then
self.MSComm1.PortOpen:=true;
self.MSComm1.Output:=at#cid=1+#13;
end;

procedure TForm1.MSComm1Comm(Sender: TObject);
var buffer,tmpStr,CallNum:string;
zhen:boolean;
begin
Buffer := Buffer + MSComm1.Input;
Buffer := UpperCase(Buffer);
self.Memo1.Lines.Add(《+buffer+》);//加了自定分格符“《》”
End;
procedure TForm1.FormCreate(Sender: TObject);
begin
with self.MSComm1 do begin
InBufferSize:=1024;
Inputlen:=0;
InputMode:=0;
Rthreshold:=1;
RTSEnable:=True;
Settings:=9600,N,8,1;
Sthreshold:=0;
end;
end;

end.

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧