控件名称:JDCellPhoneXC.OCX,点击下载 控件功能:把计算机当成手机,用电脑接收、发送手机短信,拨打、接听电话。 控件说明:标准的ActiveX控件,提供收发短信、打电话等功能;当收到短信、电话呼入时,自动触发事件,方便二次开发。如有需要,也可提供Delphi控件。本控件需要能与计算机COM口通信的手机或高深商公司研发的手机盒设备。 Delphi使用示例程序: 源代码: unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, OleCtrls, JDCellPhoneXC_TLB, Spin, StdCtrls, mmSystem, ComCtrls, Buttons; type TForm2 = class(TForm) Button1: TButton; Button2: TButton; Memo1: TMemo; Edit1: TEdit; Button4: TButton; Button3: TButton; CheckBox1: TCheckBox; SendSMS: TButton; Button5: TButton; Button6: TButton; Button7: TButton; Button8: TButton; Button9: TButton; About: TButton; Button10: TButton; Button11: TButton; SpinEdit1: TSpinEdit; Label1: TLabel; ProgressBar1: TProgressBar; SpeedButton1: TSpeedButton; JD: TJDCellPhoneX; Button12: TButton; Button14: TButton; Button15: TButton; Button13: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure Button7Click(Sender: TObject); procedure Button8Click(Sender: TObject); procedure Button9Click(Sender: TObject); procedure Button10Click(Sender: TObject); procedure Button11Click(Sender: TObject); procedure SendSMSClick(Sender: TObject); procedure AboutClick(Sender: TObject); procedure JDAfterOpen(Sender: TObject); procedure JDAfterClose(Sender: TObject); procedure JDEndRing(Sender: TObject; devid: Smallint); procedure JDRing(Sender: TObject; const no: WideString; index, devid: Smallint); procedure JDSms(Sender: TObject; const id: WideString; devid: Smallint); procedure JDJDSms(Sender: TObject; const id, no, t, s: WideString; devid: Smallint); procedure SpeedButton1Click(Sender: TObject); procedure JDNoCarrier(Sender: TObject; const str: WideString; devid: Smallint); procedure Button12Click(Sender: TObject); procedure Button13Click(Sender: TObject); procedure Button14Click(Sender: TObject); procedure Button15Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form2: TForm2; implementation {$R *.dfm} //程序启动时设置手机盒连接参数;如果计算机连接了多个盒,设置各个盒的devid procedure TForm2.FormCreate(Sender: TObject); begin Memo1.Clear; JD.LoadComportParam; //调用手机盒与计算机连接的参数,在设置(Setup)时保存的 if JD.GetComportCount>1 then //查询有几个手机盒与计算机连接 SpinEdit1.MaxValue:=JD.GetComportCount-1 //设置可用的手机盒devid else SpinEdit1.Enabled:=False; end; procedure TForm2.Button1Click(Sender: TObject); begin JD.Open; //打开通讯端口 end; procedure TForm2.Button2Click(Sender: TObject); begin JD.Close; //关闭通讯端口 end; //设置手机盒与计算机连接的端口,可以自动查找端口。一般在第一次使用时调用 procedure TForm2.Button3Click(Sender: TObject); begin //设置手机盒与计算机连接端口的函数,参数ShowForm: //True表示显示查找窗体,False表示不显示查找窗体; //属性值OnlyCheckUSBtoSerialComport默认值为True,表示在查找端口时只找USB转Com的端口 if JD.SetupPort(False) then begin JD.Open; //设置后打开连接 Memo1.Lines.Add(JD.InitSIM300); //对手机盒初始化 { 以下程序可以不要 Memo1.Lines.Add('厂商ID:'+JD.getmi(0)); Memo1.Lines.Add('模块型号:'+JD.getmm(0)); Memo1.Lines.Add('模块系列号:'+JD.getsn(0)); Memo1.Lines.Add('软件版本号:'+JD.getmr(0)); Memo1.Lines.Add('电话功能:'+JD.getcfun(0)); Memo1.Lines.Add('信号强度:'+JD.getcsq(0)); Memo1.Lines.Add('短信中心号码:'+JD.getcsca(0)); Memo1.Lines.Add('网络运营商:'+JD.getcops(0)); Memo1.Lines.Add('当前使用的麦克风通道:'+JD.getcmic(0)); Memo1.Lines.Add('听筒音量:'+JD.getclvl(0)); Memo1.Lines.Add('铃声音量:'+JD.getcrsl(0)+' (范围为0-100)' ); Memo1.Lines.Add('设置短信模式为PDU 模式:'+JD.setcmgf(0)); Memo1.Lines.Add('设置新信息提醒(有消息来将会通过串口发出提醒):'+JD.setcnmi(0)); Memo1.Lines.Add('设置来电显示号码:'+JD.setclip(0)); //以下是GPRS初始化相关内容 Memo1.Lines.Add('设置GPRS收到数据输出时包含IPD头:'+JD.setciphead(0)); Memo1.Lines.Add('查询GPRS和TCP和UDP端口:'+JD.getclport(0)); Memo1.Lines.Add('设置不固定本地端口:'+JD.setcipflp(0)); Memo1.Lines.Add('查询是IP访问还是域名访问(1-域名 0-IP):'+JD.getcdnsorip(0)); Memo1.Lines.Add('查询是否作服务器监听连接(0-否 1-是):'+JD.getcipserver(0)); Memo1.Lines.Add('查询当前GPRS接入(0-cmwap 1-cmnet):'+JD.getcipcsgp(0)); Memo1.Lines.Add('查询当前GPRS连接状态:'+JD.getcipstatus(0)); } end; end; //按短信ID读短信内容 procedure TForm2.Button4Click(Sender: TObject); var n: Integer; id, no, t, s: WideString; begin id:=WideString(Edit1.Text); //当读超长短信时,ReadSms函数读短信的方式 //0-一般用于收到短信事件OnSms中;在读超长短信时,只有当id为最后一条短信id,才完整读超长短信 //1-常用的读短信方式;当遇到超长短信时,首先计算此超长短信第一条id,按顺序读,当不成功时,读所有短信 //2-只有是超长短信,首先把SIM卡内的所有短信都读出来,拼接此条超长短信 //建议在OnSms事件中设为0,其它时候读短信时设为1 JD.ReadLongSmsWay:=1; //按id读短信的函数,no为发送号码,t为发送时间,s为短信内容 //最后一个参数表示从哪个手机盒读短信;当只有一个手机盒与计算机连接时,赋0 //SpinEdit1.Value表示devid值 n:=JD.ReadSms(id, no, t, s, SpinEdit1.Value); if n>0 then begin Memo1.Lines.Add('Read SMS'+IntToStr(SpinEdit1.Value)+' Count='+IntToStr(n)); Memo1.Lines.Add('id='+id+' no='+no+' t='+t); Memo1.Lines.Add(s); //显示短信内容 if CheckBox1.Checked then if JD.DeleteSms(id, SpinEdit1.Value) then //按ID删除短信的函数 Memo1.Lines.Add('删除短信 id='+id); end else if n=-1 then begin Memo1.Lines.Add('id='+id+' no='+no+' t='+t); Memo1.Lines.Add(s); //显示短信内容 Memo1.Lines.Add(JD.GetEroroCode(SpinEdit1.Value)); //读短信错误时,返回错误代码 end else Memo1.Lines.Add('读短信失败 id='+id); end; //拨号,Edit1.Text为拨出号码 procedure TForm2.Button5Click(Sender: TObject); begin JD.ShowWaiting('拨打电话', '正在拨打电话:'+Edit1.Text, 6000); if JD.DoDial(Edit1.Text, SpinEdit1.Value) then Memo1.Lines.Add('拨号: '+Edit1.Text) else Memo1.Lines.Add(JD.GetEroroCode(SpinEdit1.Value)); Button10.Enabled:=JD.AllowSendDTMF(SpinEdit1.Value); end; //接听电话,摘机 procedure TForm2.Button6Click(Sender: TObject); begin if JD.DoAnswer(SpinEdit1.Value) then //接听电话函数,SpinEdit1.Value为手机盒连接序号(devid) Memo1.Lines.Add('接听电话'); Button10.Enabled:=JD.AllowSendDTMF(SpinEdit1.Value); end; //挂断电话,挂机 procedure TForm2.Button7Click(Sender: TObject); begin JD.CloseWaiting; if JD.DoHold(SpinEdit1.Value) then //挂断电话 Memo1.Lines.Add('挂机'); Button10.Enabled:=JD.AllowSendDTMF(SpinEdit1.Value); end; //设置手机盒铃声等参数 procedure TForm2.Button8Click(Sender: TObject); begin if JD.SIM300Setup(SpinEdit1.Value) then Memo1.Lines.Add('设置SIM300'); end; //读取SIM卡内所有短信内容 procedure TForm2.Button9Click(Sender: TObject); var n: SmallInt; ss: WideString; begin n:=JD.ReadAllSms(ss, SpinEdit1.Value); //读取所有短信函数,返回短信数量 Memo1.Lines.Add('SIM'+IntToStr(SpinEdit1.Value)+' 共有短信条数:'+IntToStr(n)); Memo1.Lines.Add(ss); end; //发送AT指令,返回手机盒响应内容。True表示AT指令有多行返回内容 procedure TForm2.Button10Click(Sender: TObject); var s: string; begin if JD.AllowSendDTMF(SpinEdit1.Value) then begin if InputQuery('通话应答', '请输入要发送的拨号音', s) then if JD.SendDTMF(s, SpinEdit1.Value) then Memo1.Lines.Add('发送拨号音: '+s); end; end; //ShowRxChar属性表示是否显示与手机盒通讯的信息流,主要用于测试 procedure TForm2.Button11Click(Sender: TObject); begin JD.ShowRxChar:=not JD.ShowRxChar; if JD.ShowRxChar then Button11.Caption:='Hide RxChar' else Button11.Caption:='Show RxChar'; end; //发送短信 procedure TForm2.SendSMSClick(Sender: TObject); var s: WideString; begin //发送短信函数 //发送号码为Edit1.Text,内容为Memo1.Lines.Text,SpinEdit1.Value为手机盒连接序号(devid) //函数返回发送号码 s:=JD.SendSms(WideString(Edit1.Text), W
|