目前大多数的企业及学校内部都建有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。
安装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
至此,控件制作完成。此控件在笔者单位已运行半年,一切正常。
分享到:
相关推荐
没使用第三方控件,实现了GSM模块的PDU短信的发送,接收,读取,删除等功能,CDMA需要自行修改TEXT模式使用(需自信了解CDMA方面指令)
通过串口控件在delphi 7 对GSM modem(短信猫)进行收发短信的简单操作,对初学者帮助很大
GSM Modem(短信猫)源码,收发,PDU编码解码都在里面了
很简单的复合控件实例,初始化控件,加载属性,调用方法等
短信开发包,适用于手机和短信猫的开发,基于DLL文件的开发.
Delphi经典控件:ACM音频控件下载,本音频组件使用方法:直接安装ACMD7.dpk,并添加ACM目录至Delphi的Library Path中;
Delphi根据窗体大小自动缩放控件..rar
delphi modbus tcp控件 支持Delphi11
Delphi7可用的PngImage控件 PNG Delphi v.1.564,可用于D7显示Png图片。 使用方法:(Delphi 7 使用成功案例) 1、将本包中所有文件复制到开发文件保存的目录中 2、在USES单元中加入pngimage 3、窗体中插入image1...
Delphi 开发的程序自动更新控件, xe7-xe10.4 安装测试过, 使用简单, 源码, 可以自己改图片, 自定义升级
除了原装正版的WAVECOM GSM MODEM,自身更是研发了多种型号的短信猫设备,基本上基于WAVECOM核心模块,接口包括串口(RS232)、USB接口、PCI接口、网口等,并提供一系列短信猫开发包及示例程序,支持VC/VC++/VB/...
delphi 一个不错 html编辑控件 类似 js里的FCK,功能强悍。操作方便
此程序可以用连接手机发送短信。也可以用短信猫发短信。
DELPHI下的HGE绘图引擎控件,需要的朋友可以下载了参考下!
Delphi下zyPrintcrt超强万能打印控件(设计+预览+打印) 想怎么打印就怎么打印,dll方式调用,简单高效快捷。
win7系统delphi7和delphi2010下安装spcomm串口控件
1. Delphi 开发的WebSocket 控件源代码 2. 包含控件使用的演示程序Demo 3. 支持字符串和数据流传输 4. 使用indy控件 5. 可以单独发送数据,也可也i广播数据 6. 支持后台断开客户端 7. 使用方便 目前不支持 wss
PowerPDF Delphi控件
基于Delphi的各类短信发送接收原码打包上传,包括GSM Modem和阿里大于等
delphi程序运行时动态创建控件.delphi程序运行时动态创建控件.