📄 define.pas
字号:
msg_tem:=SMS_body_change(msg_tem,changed);
end;
// 长度是除去SMSC段(0891683108100005F0),从"11"开始算,除以2即得。
if leftstr(dest_temp,2)='00' then
len_all:=inttostr((length(dest_temp+msg_tem) div 2)-1)
else if leftstr(dest_temp,4)='0891' then
len_all:=inttostr((length(dest_temp+msg_tem) div 2)-9);
send_str1:='at+cmgs='+len_all+#13;
buf:=pchar(send_str1);
len:=length(send_str1);
int_temp:=sio_write(Port_tem,buf,len);
if int_temp>0 then
begin
send_str2:=dest_temp+msg_tem+#26;
buf:=pchar(send_str2);
len:=length(send_str2);
sleep(150);
int_temp:=sio_write(Port_tem,buf,len)
end;
result:=int_temp;
end;
function send_at(Port_tem:integer):integer;
var
send_str1:string;
len,int_temp:integer;
buf:pchar;
begin
send_str1:='at'+#13;
buf:=pchar(send_str1);
len:=length(send_str1);
int_temp:=sio_write(Port_tem,buf,len);
result:=int_temp;
end;
function send_cnmi(Port_tem:integer):integer;
var
send_str1:string;
len,int_temp:integer;
buf:pchar;
begin
send_str1:='at+cnmi=1,1,0,0,1'+#13;
buf:=pchar(send_str1);
len:=length(send_str1);
int_temp:=sio_write(Port_tem,buf,len);
sleep(200);
result:=int_temp;
end;
function send_ccfc(Port_tem:integer;mobile:string):integer;
var
send_str1:string;
len,int_temp:integer;
buf:pchar;
begin
send_str1:='at+ccfc=0,3,"+86'+mobile+'",145,1'+#13;
buf:=pchar(send_str1);
len:=length(send_str1);
int_temp:=sio_write(Port_tem,buf,len);
result:=int_temp;
end;
function send_cmgd(Port_tem,sms_id:integer):integer;
var send_str:string;
i,len:integer;
buf:pchar;
begin
send_str:='at+cmgd='+inttostr(sms_id)+#13;
buf:=pchar(send_str);
len:=length(send_str);
result:=sio_write(Port_tem,buf,len);
end;
function send_cmgl(Port_tem:integer):integer;
var send_str:string;
len:integer;
buf:pchar;
begin
send_str:='at+cmgl=4'+#13;
buf:=pchar(send_str);
len:=length(send_str);
result:=sio_write(Port_tem,buf,len);
end;
function send_cmgr(Port_tem,sms_id:integer):integer;
var send_str:string;
len:integer;
buf:pchar;
begin
send_str:='at+cmgr='+inttostr(sms_id)+#13;
buf:=pchar(send_str);
len:=length(send_str);
result:=sio_write(Port_tem,buf,len);
end;
function com_write(Port_id:integer;write_str:string):integer;
var lenTT:INTEGER;
begin
lenTT:=length(write_str)+1;
result:=sio_write(Port_id,pchar(write_str+#13),lenTT);
end;
function GBToUcs2(s:string):string ;
var
i,len,cur:Integer;
swidestring:widestring;
t,Result_remp:string;
begin
swidestring:=s; //转化为中文字符
len:=Length(swidestring);
i:=1;
while i<=len do
begin
cur:=ord(swidestring[i]);
FmtStr(t,'%4.4X',[cur]);
Result_remp:=Result_remp+t;
inc(i);
end;
Result:=Result_remp;
end;
function Ucs2ToGB(s:string):WideString ;
var
i: Integer;
tempstr:string;
begin
i:=0;
while i<length(s) do
begin
tempstr:=copy(s,i+1,4);
Result:= Result+WideChar(strtoint(format('%d',[strtoint('$'+tempstr)])));
inc(i,4)
end;
end;
function sms_Mobile_change(Mobile:string):string ;
var
m_len,i,j:integer;
output_mobile:string;
begin
m_len:=length(Mobile);
if m_len mod 2<>0 then
begin
Mobile:=Mobile+'F';
m_len:=m_len+1
end;
for i:=1 to m_len do
begin
if i mod 2=1 then j:=i+1 else j:=i-1;
output_mobile:=output_mobile+Mobile[j]
end;
result:=output_mobile;
end;
function push_body_change(sms_content:string):string;
var url_temp,content,sms_temp:string;
i:integer;
sms_yy,urly,contenty:widestring;
begin
sms_yy:=widestring(sms_content);
i:=pos('###',sms_yy);
contenty:=leftstr(sms_yy,i-1);
urly:=rightstr(sms_yy,length(sms_yy)-i-2);
url_temp:=gbToUTF8(urly);
content:=gbToUTF8(contenty);
sms_temp:='00F500'+inttohex(((length(content+url_temp)+72) div 2),2)+'0B05040B8423F0000303010101060603AE81EA8DCA03056A0045C6080C03'+url_temp+'000103'+content+'000101';
result:=sms_temp;
end;
function gbToUTF8(str:WideString): string;
var
s: pchar;
i: integer;
tmp: string;
begin
tmp := '';
result := '';
s := pchar(Utf8encode(str));
for i := 0 to strlen(s)-1 do begin
tmp := tmp + format('%2.2x', [ord(s[i])]);
end;
result := tmp;
end;
function DecodeSMS7Bit(PDU : string):string;
var OctetStr : string;
OctetBin : string;
Charbin : string;
PrevOctet: string;
Counter : integer;
Counter2 : integer;
begin
PrevOctet:='';
Result:='';
for Counter:=1 to length(PDU) do
begin
if length(PrevOctet)>=7 then { if 7 Bit overflow on previous }
begin
if BinStrToInt1(PrevOctet)<>0 then
Result:=Result+Chr(BinStrToInt1(PrevOctet))
else Result:=Result+' ';
PrevOctet:='';
end;
if Odd(Counter) then { only take two nibbles at a time }
begin
OctetStr:=Copy(PDU,Counter,2);
OctetBin:=HexToBin(pchar(OctetStr));
Charbin:='';
for Counter2:=1 to length(PrevOctet) do
Charbin:=Charbin+PrevOctet[Counter2];
for Counter2:=1 to 7-length(PrevOctet) do
Charbin:=OctetBin[8-Counter2+1]+Charbin;
if BinStrToInt1(Charbin)<>0 then Result:=Result+Chr(BinStrToInt1(CharBin))
else Result:=Result+' ';
PrevOctet:=Copy(OctetBin,1,length(PrevOctet)+1);
end;
end;
end;
function HexToBin(HexNr : string): string;
{ only stringsize is limit of binnr }
var Counter : integer;
begin
Result:='';
for Counter:=1 to length(HexNr) do
Result:=Result+HexCharToBin(HexNr[Counter]);
end;
function HexCharToBin(HexToken : char): string;
var DivLeft : integer;
begin
DivLeft:=HexCharToInt(HexToken); { first HEX->BIN }
Result:='';
{ Use reverse dividing }
repeat { Trick; divide by 2 }
if odd(DivLeft) then { result = odd ? then bit = 1 }
Result:='1'+Result { result = even ? then bit = 0 }
else
Result:='0'+Result;
DivLeft:=DivLeft div 2; { keep dividing till 0 left and length = 4 }
until (DivLeft=0) and (length(Result)=4); { 1 token = nibble = 4 bits }
end;
function HexCharToInt(HexToken : char):Integer;
begin
{if HexToken>#97 then HexToken:=Chr(Ord(HexToken)-32);
{ use lowercase aswell }
Result:=0;
if (HexToken>#47) and (HexToken<#58) then { chars 0....9 }
Result:=Ord(HexToken)-48
else if (HexToken>#64) and (HexToken<#71) then { chars A....F }
Result:=Ord(HexToken)-65 + 10;
end;
function BinStrToInt(BinStr : string) : integer;
var counter : integer;
begin
if length(BinStr)>16 then
raise ERangeError.Create(#13+BinStr+#13+
'is not within the valid range of a 16 bit binary.'+#13);
Result:=0;
for counter:=1 to length(BinStr) do
if BinStr[Counter]='1' then
Result:=Result+pow(2,length(BinStr)-counter);
end;
function pow(base, power: integer): integer;
var counter : integer;
begin
Result:=1;
for counter:=1 to power do
Result:=Result*base;
end;
function BinStrToInt1(BinStr : string) : integer;
var counter : integer;
begin
if length(BinStr)>16 then
raise ERangeError.Create(#13+BinStr+#13+
'is not within the valid range of a 16 bit binary.'+#13);
Result:=0;
for counter:=1 to length(BinStr) do
if BinStr[Counter]='1' then
Result:=Result+pow(2,length(BinStr)-counter);
end;
function time_to_int(dateTIME:TDateTime):integer;
var dateTIME_str:string ;
begin
dateTIME_str:=FormatDateTime('yyyy-mm-dd hh:mm:ss',dateTIME);
result:=(strtoint(copy(dateTIME_str,12,2)))*3600+(strtoint(copy(dateTIME_str,15,2)))*60+(strtoint(copy(dateTIME_str,18,2)));
end;
function is_int(input:string):Boolean;
var i:integer;
str_temp:string;
begin
result:=true ;
str_temp:=trim(input);
if str_temp<>'' then
begin
for i:=1 to length(str_temp) do
begin
if ((str_temp[i]>'9') or (str_temp[i]<'0')) and (str_temp[i]<>'-') then
begin
//showmessage(str_temp[i]);
result:=false ;
break;
end;
end;
end
else
result:=false ;
end;
function GetIdeSerialNumber : pchar;
const IDENTIFY_BUFFER_SIZE = 512;
type
TIDERegs = packed record
bFeaturesReg : BYTE; // Used for specifying SMART "commands".
bSectorCountReg : BYTE; // IDE sector count register
bSectorNumberReg : BYTE; // IDE sector number register
bCylLowReg : BYTE; // IDE low order cylinder value
bCylHighReg : BYTE; // IDE high order cylinder value
bDriveHeadReg : BYTE; // IDE drive/head register
bCommandReg : BYTE; // Actual IDE command.
bReserved : BYTE; // reserved for future use. Must be zero.
end;
TSendCmdInParams = packed record
// Buffer size in bytes
cBufferSize : DWORD;
// Structure with drive register values.
irDriveRegs : TIDERegs;
// Physical drive number to send command to (0,1,2,3).
bDriveNumber : BYTE;
bReserved : Array[0..2] of Byte;
dwReserved : Array[0..3] of DWORD;
bBuffer : Array[0..0] of Byte; // Input buffer.
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -