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
手機(jī)號(hào)碼有兩種表示方法:11位和13位(帶國(guó)家碼86),一般手機(jī)發(fā)送時(shí)都是以13位形式表示的,所以以上的函數(shù)還有一個(gè)功能是自動(dòng)將11位格式手機(jī)號(hào)碼轉(zhuǎn)換為13位形式,然后再轉(zhuǎn)換為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
因?yàn)槭謾C(jī)同一時(shí)間只能處理一件事情,因此這個(gè)函數(shù)只負(fù)責(zé)發(fā)送短信,關(guān)于短信發(fā)送成功與否以及閱讀短信的部分集中在一起處理。判斷手機(jī)短信發(fā)送成功與否主要由AT CMGS命令執(zhí)行以后的返回碼來(lái)決定(可參見(jiàn)前文的AT指令介紹部分)。
為了防止手機(jī)因過(guò)于繁忙而出錯(cuò),這里采取了一定的方法讓手機(jī)有充分的時(shí)間處理發(fā)送和接收及刪除等操作。Sleep()函數(shù)正是為此而設(shè)計(jì)的,在發(fā)送及刪除操作后都會(huì)讓程序暫停一秒,這樣就不至于使得手機(jī)過(guò)于繁忙。
相比于手機(jī)短信的發(fā)送而言,手機(jī)短信的接收主要的工作正好與之相反。手機(jī)短信的發(fā)送需要將待發(fā)送的短信內(nèi)容轉(zhuǎn)換為Unicode碼,而短信的接收則需要將接收到的Unicode碼轉(zhuǎn)換成中文字符。下面的函數(shù)將實(shí)現(xiàn)解碼功能。同手機(jī)短信發(fā)送的編碼函數(shù)一樣,這里也應(yīng)用了一個(gè)VB內(nèi)置的函數(shù)AscW()函數(shù)來(lái)將Unicode碼轉(zhuǎn)換為中文:
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手機(jī)短信接收函數(shù)
相對(duì)于短信的發(fā)送函數(shù)而言,短信的接收相當(dāng)簡(jiǎn)單,只需要以下的三行代碼就完成了。但是它使用的技術(shù)卻決不比短信的發(fā)送少,這里主要用到了Mscomm控件的Output屬性和AT CMGR指令。
PublicSubreadsms(rnumAsString)
mobcomm.Output="AT CMGF=1" vbCr
mobcomm.Output="AT CMGR="&rnum vbCr
EndSub
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注