中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Delphi > 综合文章
Delphi制作GSM Modem的短信发送控件
作者:Sabine  时间:2006-10-05 12:26 出处:ccidnet.com 责编:月夜寒箫
              摘要: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所在的串口号。

Phone:要发送的目的手机号码。

Msg:发送信息内容。

完成后单击刷新。

打开main.pas为该方法写程序。

以下是main.pas的程序清单:

 

unit main;
            {$WARN SYMBOL_PLATFORM OFF}
            interface
            uses
            ComObj, ActiveX, jksms_TLB, StdVCl, SysUtils,Windows,ADTrmEmu,
            OoMisc,reGIStry;
            type
            Tsms = class(TAutoObject, Isms)
            protected
            procedure sendmsg(comnumber: Integer; const phone, msg: WideString);
            safecall;
            { Protected declarations }
            end;
            implementation
            uses ComServ , adport;//这里需手工添加
            function SEncodeMobNO(SmobNO: string): string;
            //要想发送中文短信必须使用Modem的PDU方式。这个函数是将手机号码进行PDU编码。
            var
             TempPchar: Pchar;
             i: integer;
             Str: string;
            begin
             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数组化
             i := 0;
             Str := ’’;
             while i < length(TempPchar) do begin
              Str := Str + TempPchar[i + 1] + TempPchar[i];
              i := i + 2;
             end;
             result := Str;
            end;
            function EncodeChinese(Input: WideString): string;//将信息内容进行PDU编码
            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
             apdcomport:Tapdcomport;
             r,s,s2,s3,s4,s5:string;
            mdlong,tmp:integer;
             msgs:WideString;
            begin
             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;
             //计算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);
             apdcomport.Output:=r;//发送短信。
             delayticks(9,true);
             apdcomport.Open:=false;
             apdcomport.Free;
            end;
            initialization
            TAutoObjectFactory.Create(ComServer, Tsms, Class_sms,ciMultiInstance, tmApartment);
            end.

以上程序编译后生成jksms.dll文件。Copy到Web服务器上d:\。运行:regsvr32 d:\jksms.dll。在ASP程序中这样使用。

 

Set sms=Server.CreateObject("jksms.sms")
            Msg="您好!测试一下好不好用!"
            Phone="手机号码"
            Port=Modem所在端口号
            Sms.sendmsg port,phone,msg

至此,控件制作完成。此控件在笔者单位已运行半年,一切正常。

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有