控件名稱: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
|