Delphi制作GSM Modem的短信发送控件
|
源代码网整理以下目前大多数的企业及学校内部都建有Intranet。并建有内部网站实现资源共享。为了使用户及时的得知网上的最新信息,很多网站都采用了手机短信提醒的方式,但使用中国移动或中国联通的SP方式,会大大的增加企业的成本。故本文讨论的是利用GSM Modem和短信发送控件来实现的短信提醒。 源代码网整理以下首先,介绍一下笔者所使用环境。 源代码网整理以下服务器:Windows 2000 Advanced Server、IIS 5.0、ASP、SQL Server 2000 源代码网整理以下客户端:Windows XP 或Windows 2000 源代码网整理以下开发工具:Delphi6.0,APRO4.06 源代码网整理以下在建立项目之前先在Delphi6中安装APRO控件,这是笔者使用的方法,读者也可以用comm32。 源代码网整理以下新建一个自动化对象 源代码网整理以下命名为:sms点击OK. 源代码网整理以下保存单元文件,命名为:main.pas。 源代码网整理以下新建方法:sendmsg 源代码网整理以下Comnumber:GSM Modem所在的串口号。 软件开发网 www.mscto.com 源代码网整理以下Phone:要发送的目的手机号码。 软件开发网 www.mscto.com 源代码网整理以下Msg:发送信息内容。 源代码网整理以下完成后单击刷新。 源代码网整理以下打开main.pas为该方法写程序。 源代码网整理以下以下是main.pas的程序清单: 软件开发网 www.mscto.com
源代码网整理以下 软件开发网 www.mscto.com 源代码网整理以下 {$WARN SYMBOL_PLATFORM OFF} 源代码网整理以下 interface 源代码网整理以下 uses 源代码网整理以下 ComObj, ActiveX, jksms_TLB, StdVCl, SysUtils,Windows,ADTrmEmu, 源代码网整理以下 OoMisc,reGIStry; 软件开发网 www.mscto.com 源代码网整理以下 type 源代码网整理以下 Tsms = class(TAutoObject, Isms) 源代码网整理以下 protected 源代码网整理以下 procedure sendmsg(comnumber: Integer; const phone, msg: WideString); 源代码网整理以下 safecall; 源代码网整理以下 { Protected declarations } 源代码网整理以下 end; 软件开发网 www.mscto.com 源代码网整理以下 implementation 源代码网整理以下 uses ComServ , adport;//这里需手工添加 源代码网整理以下 function SEncodeMobNO(SmobNO: string): string; 源代码网整理以下 //要想发送中文短信必须使用Modem的PDU方式。这个函数是将手机号码进行PDU编码。 源代码网整理以下 var 源代码网整理以下 TempPchar: Pchar; 源代码网整理以下 i: integer; 源代码网整理以下 Str: string; 源代码网整理以下 begin 软件开发网 www.mscto.com
源代码网整理以下 if (copy(smobno, 1, 1) = ’ ’) then //判断是否包含国家编码 源代码网整理以下 SmobNO := copy(smobno, 2, length(smobno) - 1); //去掉手机号码中的’ ’ 源代码网整理以下 if ((length(SmobNO) mod 2) = 1) then 源代码网整理以下 SmobNO := SmobNO ’F’; 源代码网整理以下 TempPchar := Pchar(SmobNO); //将字符串 Char数组化 软件开发网 www.mscto.com 源代码网整理以下 i := 0; 源代码网整理以下 Str := ’’; 源代码网整理以下 while i < length(TempPchar) do begin 源代码网整理以下 Str := Str TempPchar[i 1] TempPchar[i]; 源代码网整理以下 i := i 2; 源代码网整理以下 end; 源代码网整理以下 result := Str; 源代码网整理以下 end; 软件开发网 www.mscto.com 源代码网整理以下 function EncodeChinese(Input: WideString): string;//将信息内容进行PDU编码 软件开发网 www.mscto.com
源代码网整理以下 var 源代码网整理以下 i: Integer; 源代码网整理以下 begin 源代码网整理以下 Result := ’’; 源代码网整理以下 for i := 1 to Length(Input) do 源代码网整理以下 Result := Result Format(’%4.4X’, [ord(Input[i])]); 源代码网整理以下 end; 源代码网整理以下 procedure Tsms.sendmsg(comnumber: Integer; const phone, msg: WideString); 源代码网整理以下 //发送短信的方法 源代码网整理以下 var 软件开发网 www.mscto.com 源代码网整理以下 apdcomport:Tapdcomport; 源代码网整理以下 r,s,s2,s3,s4,s5:string; 源代码网整理以下 mdlong,tmp:integer; 软件开发网 www.mscto.com 源代码网整理以下 msgs:WideString; 源代码网整理以下 begin 软件开发网 www.mscto.com 源代码网整理以下 apdcomport:=TApdComPort.Create(nil);//创建串口通信对象 源代码网整理以下 apdcomport.AutoOpen:=false;//关闭自动打开属性 源代码网整理以下 apdcomport.Open:=false; 源代码网整理以下 apdcomport.ComNumber:=comnumber;//设置串行通信口 源代码网整理以下 apdcomport.Baud:=19200;//设置串口波特率 源代码网整理以下 msgs:=msg; 源代码网整理以下 s:=’0031000D9168’ ; 源代码网整理以下 //PDU编码属性,这种方法是不需要设置短信中心号码的,因为现的手机SIM卡已经写好了 源代码网整理以下 s2:=SEncodeMobNO(phone);//对手机号码进行PDU编码 源代码网整理以下 s3:=’0008A7’; 源代码网整理以下 s4:=’’; 源代码网整理以下 s5:=EnCodeChinese(msgs); 源代码网整理以下 tmp:=length(s5)div 2; 源代码网整理以下 s4:=format(’%X’,[tmp]); 源代码网整理以下 if length(s4)<2 then 源代码网整理以下 s4:=’0’ s4; 软件开发网 www.mscto.com 源代码网整理以下 //计算PDU编码长度 源代码网整理以下 r:=s s2 s3 s4 s5 ^Z; 源代码网整理以下 cmdlong:=(length(r)-2) div 2; 源代码网整理以下 apdcomport.Open:=true;//打开串行口 源代码网整理以下 apdcomport.Output:=’AT CMGF=0’#13;//设置Modem为PDU模式 源代码网整理以下 delayticks(7,true);//延时 源代码网整理以下 apdcomport.Output:=’AT CMGS=’ inttostr(cmdlong) #13;//设置信息长度,这里应为PDU编码长度的1/2. 源代码网整理以下 delayticks(7,true); 软件开发网 www.mscto.com 源代码网整理以下 apdcomport.Output:=r;//发送短信。 源代码网整理以下 delayticks(9,true); 源代码网整理以下 apdcomport.Open:=false; 源代码网整理以下 apdcomport.Free; 源代码网整理以下 end; 源代码网整理以下 initialization 源代码网整理以下 TAutoObjectFactory.Create(ComServer, Tsms, Class_sms,ciMultiInstance, tmApartment); 软件开发网 www.mscto.com 源代码网整理以下 end. 源代码网推荐 源代码网供稿. |
