短信发送dll源代码.doc_第1页
短信发送dll源代码.doc_第2页
短信发送dll源代码.doc_第3页
短信发送dll源代码.doc_第4页
短信发送dll源代码.doc_第5页
免费预览已结束,剩余6页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

unit UCOM;interfaceuses windows,SysUtils,dialogs,Forms,IniFiles;Const BuffMax=4096;var ComH:HWND; / CanSend,ExitT:Boolean; function ReadData(Flag:integer=0;Delay:integer=1):String; function WriteData(DataBuff: String;flag:integer=0):Boolean; function UniCode2GB(S:String):String;/转汉字 function DecCode(Str:String):String;/解码 /function GetCenterNo():String; function GetCenterNo(Str:String):String; function GetIniFiles(const Section,Ident: string;FIniFileName:String):string; function Check():Boolean;stdcall;/检测线路 function SetModel(Model:integer=0):Boolean;Stdcall; /设置模式 function ReadMessage(Index:byte):PChar;stdcall; /读单条信息 function DeleteMessage(Index:byte):Boolean;stdcall;/删除单条信息 function DeleteALL():Boolean;stdcall; /删除所有信息 function ReadCenterNo():PChar;stdcall;/取中心号码 function SetCenterNo(CenterNo:string):boolean;stdcall;/ function SendPDU(MsgStr:String;CenterNo:String;RecNo:string;Delay:Integer=4):boolean;stdcall; /发短信 function SendText(MsgStr:String;CenterNo:String;RecNo:string;Delay:Integer=4):boolean;stdcall; /发TEXT短信 function CloseCom:Boolean;stdcall; /关闭串口 function InitCom(ICCom:byte;BaudRate:integer=9600;StopBits:byte=0;Parity:byte=0;ByteSize:byte=8):Boolean;stdcall; /打开串口implementationfunction SetCenterNo(CenterNo:String):boolean;stdcall;/var Order:String;begin Result:=False; if Comh0 then begin Order:=Copy(Order,1,Pos(?,Order)-1)+=+Trim(CenterNo)+; end else Exit; if WriteData(Order) then begin Order:=ReadData(); if Pos(OK,UpperCase(Order) 0 then begin Result:=True; end; end;end;function SendText(MsgStr:String;CenterNo:String;RecNo:string;Delay:Integer=4):boolean;stdcall;var i:integer; Order:String;begin Result:=False; if Length(RecNo)=11 then RecNo:=86+RecNo; if Comh0 then Result:=True; end; end;end;function ReadCenterNo():PChar;var Order:String;begin Result:=; if Comh0 then begin Result:=PChar(GetCenterNo(Order); end; end;end;function DeleteALL():Boolean;stdcall;var Order:String;begin Result:=False; if Comh0 then Result:=True; end;end;function DeleteMessage(Index:byte):Boolean;stdcall;var Order:String;begin Result:=False; if Comh0 then Result:=True; end;end;function ReadMessage(Index:byte):PChar;stdcall;var Order:String;begin Result:=ERROR; if Comh0 then begin Result:=PChar(DecCode(Order); end; end;end;function SetModel(Model:integer=0):Boolean;stdcall; /0 PDU ,1var Order:String;begin Result:=False; if Comh0 then Order:=copy(Order,1,Pos(=,Order)+0; end else begin if Pos(=,Order)0 then Order:=copy(Order,1,Pos(=,Order)+1; end; if WriteData(Order) then begin if Pos(OK,UpperCase(ReadData) 0 then Result:=True; end;end;function Check():Boolean;var Order:String;begin Result:=False; if Comh0 then Result:=True; end;end;function GetIniFiles(const Section,Ident: string;FIniFileName:String): string;var T: TIniFile; DValue:String;begin Result := ; if Section= then exit; if UpperCase(Ident)=CHECK then DValue:=AT; /检测线路 if UpperCase(Ident)=PDU then DValue:=AT+CMGF=0;/设置为PDU模式 if UpperCase(Ident)=SENDAT then DValue:=AT+CMGS; /发送短信 if UpperCase(Ident)=READAT then DValue:=AT+CMGL=0;/所有信息列表 if UpperCase(Ident)=SMSCENTER then DValue:=AT+CSCA?;/取发送中心 if UpperCase(Ident)=SAVESIM then DValue:=AT+CNMI=2,1; /存储到SIM if UpperCase(Ident)=SAVEFILE then DValue:=AT+CNMI=2,2; /存储到文件 if UpperCase(Ident)=DELETESMS then DValue:=AT+CMGD; /删除单条短信 if UpperCase(Ident)=DELETEALLSMS then DValue:=AT+CMGD=1,4; /删除所有短信 if UpperCase(Ident)=READONE then DValue:=AT+CMGR; /读取单条短信 T:=TIniFile.Create(FIniFileName); try Result := T.ReadString(Section, Ident,DValue); finally T.Free; end;end;function CloseCom: Boolean;var Err: Boolean;begin Result := False; try Err := CloseHandle(Comh); Comh := 0; except Err := False; end; if Err then Result := True;end;function InitCom(ICCom:byte;BaudRate:integer=9600;StopBits:byte=0;Parity:byte=0;ByteSize:byte=8): Boolean;var tOut: CommTimeOuts; Comdcb: dcb;begin Result := False; if Comh 0 then CloseCom; Comh := CreateFile(PChar(COM+IntToStr(ICCom), GENERIC_READ+GENERIC_WRITE, FILE_SHARE_READ + FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0); if Comh = INVALID_HANDLE_VALUE then /句柄检查 Exit; if not GetCommState(Comh, Comdcb) then /DCB检查 Exit; Comdcb.BaudRate := BaudRate; /波特率设置 Comdcb.StopBits := StopBits; /停止位 Comdcb.Parity := Parity; /校验 Comdcb.ByteSize := ByteSize; /数据位长度 if not SetCommState(Comh, Comdcb) then Exit; GetCommTimeOuts(Comh, tOut); tOut.ReadIntervalTimeOut :=50; tOut.ReadTotalTimeOutMultiplier := 10; tOut.ReadTotalTimeOutConstant := 10; SetCommTimeOuts(Comh, tOut); SetupComm(Comh, BuffMax, BuffMax); PurgeComm(Comh,PurGe_RxClear); PurgeComm(Comh,PurGe_TxClear); Result := True;end;function ReadData(Flag:integer=0;Delay:integer=1): String;var ReadStr: array0.BuffMax of Byte; lpNumberOfBytesRead: DWORD; i:integer;begin Result:=; for i:=1 to Delay*10 do begin sleep(50); application.ProcessMessages; end; Fillchar(ReadStr,BuffMax,0); if ReadFile(Comh, ReadStr, BuffMax, lpNumberOfBytesRead, nil) then begin if Flag0 then begin Result:=DecCode(Strpas(ReadStr); end else Result:=Strpas(ReadStr); end;end;function WriteData(DataBuff: String;flag:integer=0): Boolean;var WriteStr:Array0.BuffMax of Char; lpNumberOfBytesWrite: DWORD; len:integer;begin Result:=False; len:=length(DataBuff); Fillchar(WriteStr,BuffMax,0); StrPCopy(WriteStr,DataBuff); if (flag=1) and (len=4) do begin try Result :=WideChar(StrToInt($+SI-3+SI-2+SI-1+SI)+ Result; except end; I:=I-4; end;end;function GetTelPhone(Str:String):string;var i:integer; Tmp:string;begin Result:=; if Str= then Exit; for i:=0 to (length(Str) div 2)-1 do begin if Str2*i+1=F then begin Tmp:=Tmp+Str2*i+2; Break; end; Tmp:=Tmp+Str2*i+2+Str2*i+1; end; Result:=Tmp;end;function GetDataTime(SMS:string):string;begin Result:=; if SMS then Result:=copy(SMS,1,2)+年+copy(SMS,3,2)+月+copy(SMS,5,2)+日 +copy(SMS,7,2) +:+copy(SMS,9,2)+:+copy(SMS,11,2)+ +copy(SMS,13,2);end;function DecCode(Str:String):String;var Len,PosL:Integer; Temp,DCode:string;begin Result:=; Len:=Pos(0891,Str); if Len0 then begin Str:=copy(Str,Len,length(Str)-Len+1); Len:=5; Posl:=StrToIntdef(copy(Str,1,2),0);/取08 Temp:=SMSC+GetTelPhone(copy(Str,Len,2*(posl-1);/求发送中心地址 Len:=Posl*2+2+2+1; Posl:=StrToIntdef($+copy(Str,Len,2),0); Len:=Len+2+2; if (Posl mod 20) then Posl:=Posl+1; Temp:=Temp+SEND+GetTelPhone(copy(Str,Len,posl); DCode:=copy(Temp,Len+Posl+3,2);/编码方式08为中文 Len:=Len+Posl+2+2;/0008 Temp:=Temp+TIME+GetDataTime(GetTelPhone(copy(Str,Len,14); Len:=Len+14; Posl:=StrToIntDef($+copy(Str,Len,2),0); if DCode08 then Temp:=Temp+TEXT+copy(Str,Len+2,posl*2) else Temp:=Temp+TEXT+UniCode2GB(copy(Str,Len+2,posl*2); Result:=Temp; end;end;function InCodePDUSMS(Mess:WideString): String;var sLen,cur,i:integer; strTmp:string;begin result := ; sLen := length(Mess); i := 1; while i = sLen do begin cur := ord(Messi); FmtStr(strTmp,%4.4X,cur); result := result + strTmp; inc(i); end;end;function StrtoPDU(CentreNO,RcvNO:string):string;var StrTemp,PDURcvNo:String; i,m,StrLen:integer;begin StrTemp:=; PDURcvNo:=; StrLen:=Length(CentreNO); if (StrLen mod 2)0 then begin CentreNO:=CentreNO+F; StrLen

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论