PublicFunctionchg(rmsgAsString)AsString
DimtepAsString
DimtempAsString
DimiAsInteger
DimbAsInteger
tep=rmsg
i=Len(tep)
b=i/4
Ifi=b*4Then
b=b-1
tep=Left(tep,b*4)
Else
tep=Left(tep,b*4)
EndIf
chg=""
Fori=1Tob
temp="&H"&Mid(tep,(i-1)*4 1,4)
chg=chg&ChrW(CInt(Val(temp)))
Nexti
EndFunction
PublicFunctiontelc(numAsString)AsString
DimtlAsInteger
Dimltem,rtem,ttemAsString
DimtiAsInteger
ttem=""
tl=Len(num)
Iftl<>11Andtl<>13Then
MsgBox"wrongnumber."&tl
ExitFunction
EndIf
Iftl=11Then
tl=tl 2
num="86"&num
EndIf
Forti=1TotlStep2
ltem=Mid(num,ti,1)
rtem=Mid(num,ti 1,1)
Ifti=tlThenrtem="F"
ttem=ttem&rtem<em
Nextti
telc=ttem
EndFunction
手機號碼有兩種表示方法:11位和13位(帶國家碼86),一般手機發送時都是以13位形式表示的,所以以上的函數還有一個功能是自動將11位格式手機號碼轉換為13位形式,然后再轉換為PDU串。
ConstPRex="0891"
Constmidx="11000D91"
Constsufx="000800"
PublicFunctionSendsms(cscaAsString,numAsString,msgAsString)As_Boolean
Dimpdu,psmsc,pnum,pmsgAsString
DimlengAsString
DimlengthAsInteger
length=Len(msg)
length=2*length
leng=Hex(length)
Iflength<16Thenleng="0"&leng
psmsc=Trim(telc(csca))
pnum=Trim(telc(num))
pmsg=Trim(ascg(msg))
pdu=prex&psmsc&midx&pnum&sufx&leng&pmsg
sleep(1)
mobcomm.Output="AT CMGF=0" vbCr
mobcomm.Output="AT CMGS="&Str(15 length) vbCr
mobcomm.Output=pdu&Chr$(26)
sleep(1)
Sendsms=True
EndFunction
因為手機同一時間只能處理一件事情,因此這個函數只負責發送短信,關于短信發送成功與否以及閱讀短信的部分集中在一起處理。判斷手機短信發送成功與否主要由AT CMGS命令執行以后的返回碼來決定(可參見前文的AT指令介紹部分)。
為了防止手機因過于繁忙而出錯,這里采取了一定的方法讓手機有充分的時間處理發送和接收及刪除等操作。Sleep()函數正是為此而設計的,在發送及刪除操作后都會讓程序暫停一秒,這樣就不至于使得手機過于繁忙。
相比于手機短信的發送而言,手機短信的接收主要的工作正好與之相反。手機短信的發送需要將待發送的短信內容轉換為Unicode碼,而短信的接收則需要將接收到的Unicode碼轉換成中文字符。下面的函數將實現解碼功能。同手機短信發送的編碼函數一樣,這里也應用了一個VB內置的函數AscW()函數來將Unicode碼轉換為中文:
PublicFunctionascg(smsgAsString)AsString
Dimsi,sbAsInteger
DimstmpAsInteger
DimstempAsString
sb=Len(smsg)
ascg=""
Forsi=1Tosb
stmp=AscW(Mid(smsg,si,1))
IfAbs(stmp)<127Then
stemp="00"&Hex(stmp)
Else
stemp=Hex(stmp)
EndIf
ascg=ascg&stemp
Nextsi
ascg=Trim(ascg)
EndFunction
2手機短信接收函數
相對于短信的發送函數而言,短信的接收相當簡單,只需要以下的三行代碼就完成了。但是它使用的技術卻決不比短信的發送少,這里主要用到了Mscomm控件的Output屬性和AT CMGR指令。
PublicSubreadsms(rnumAsString)
mobcomm.Output="AT CMGF=1" vbCr
mobcomm.Output="AT CMGR="&rnum vbCr
EndSub
新聞熱點
疑難解答