金笛工业手机论坛  

返回   金笛工业手机论坛 > 开发者乐园 > 短信开发资料

短信开发资料 短信开发技巧,代码分析

回复
 
LinkBack 主题工具 显示模式
旧 2012-08-31   #1 (permalink)
论坛管理员
 
admin 的头像
 
注册日期: 2009-06-30
帖子: 861
admin 的声望功能已被禁用
默认 Delphi制作GSM Modem的短信发送控件

目前大多数的企业及学校内部都建有Intranet。并建有内部网站实现资源共享。为了使用户及时的得知网上的最新信息,很多网站都采用了手机短信 提醒的方式,但使用中国移动或中国联通的SP方式,会大大的增加企业的成本。故本文讨论的是利用GSM Modem和短信发送控件来实现的短信提醒。   首先,介绍一下笔者所使用环境。
  服务器:Windows 2000 Advanced Server、IIS 5.0、ASP、SQL Server 2000
  客户端:Windows XP 或Windows 2000
  开发工具elphi6.0,APRO4.06
  在建立项目之前先在Delphi6中安装APRO控件,这是笔者使用的方法,读者也可以用comm32。
  安装APRO如图1
  装好后,新建项目。
  选择ActiveX Library
  点击OK后。保存项目命名为jksms.dpr.
  新建一个自动化对象

  命名为: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;
 cmdlong,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
  至此,控件制作完成。此控件在笔者单位已运行半年,一切正常。
__________________

让世界倾听我们的笛声
admin 当前离线   回复时引用此帖
回复

书签


当前查看此主题的会员: 1 (0 位会员和 1 位游客)
 

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码
Trackbacks are 启用
Pingbacks are 启用
Refbacks are 启用



所有时间均为北京时间。现在的时间是 19:46


Powered by vBulletin® 版本 3.8.3
版权所有 ©2000 - 2024,Jelsoft Enterprises Ltd.