程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi制作GSM Modem的短信發送控件

Delphi制作GSM Modem的短信發送控件

編輯:Delphi

目前大多數的企業及學校內部都建有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

至此,控件制作完成。此控件在筆者單位已運行半年,一切正常。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved