vb教程:手机短信收发-vb教程



yle=\"MARGIN: 13pt 0cm\">手机短信发送 prefix = o ns = \"urn:schemas-microsoft-com:office:office\" />² 中文转换成Unicode码



手机短消息发送是以PDU串形式发送出去中文以Unicode码来表示所以在发送中文短消息的前必须首先将中文转换为Unicode码下面将实现这个功能这个主要应用到VB自带个格式转换:ChrW()将中文转换为Unicode码



Public Function chg(rmsg As String) As String

Dim tep As String

Dim temp As String

Dim i As Integer

Dim b As Integer

tep = rmsg

i = Len(tep)

b = i / 4

If i = b * 4 Then

b = b - 1

tep = Left(tep, b * 4)

Else

tep = Left(tep, b * 4)

End If

chg = \"\"

For i = 1 To b

temp = \"&H\" & Mid(tep, (i - 1) * 4 + 1, 4)

chg = chg & ChrW(CInt(Val(temp)))

Next i

End Function





² 短信中心手机号码PDU串转换



同上为了发送以PDU模式发送短消息必须将手机号码和对方手机号码也转换为PDU格式下面就是为了实现这种转换:



Public Function telc(num As String) As String

Dim tl As Integer



Dim ltem, rtem, ttem As String

Dim ti As Integer

ttem = \"\"

tl = Len(num)

If tl <> 11 And tl <> 13 Then

MsgBox \"wrong number.\" & tl

Exit Function

End If

If tl = 11 Then

tl = tl + 2

num = \"86\" & num

End If

For ti = 1 To tl Step 2

ltem = Mid(num, ti, 1)

rtem = Mid(num, ti + 1, 1)

If ti = tl Then rtem = \"F\"

ttem = ttem & rtem & ltem

Next ti

telc = ttem

End Function






手机号码有两种表示思路方法:11位和13位(带国家码86)般手机发送时都是以13位形式表示所以以上还有个功能是自动将11位格式手机号码转换为13位形式然后再转换为PDU串



² 手机短信发送



手机短信发送主要借助于VBMscommControl控件实现有关前面技术介绍部分有详细介绍短信发送是由AT+CMGS指令完成采用PDU模式发送代码如下:



Const prex = \"0891\"

Const midx = \"11000D91\"

Const sufx = \"000800\"

Public Function Sendsms(csca As String, num As String, msg As String) As _Boolean

Dim pdu, psmsc, pnum, pmsg As String

Dim leng As String

Dim length As Integer

length = Len(msg)

length = 2 * length

leng = Hex(length)

If length < 16 Then leng = \"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

End Function





手机同时间只能处理件事情因此这个只负责发送短信有关短信发送成功和否以及阅读短信部分集中在起处理判断手机短信发送成功和否主要由AT+CMGS命令执行以后返回码来决定(可参见前文AT指令介绍部分)



为了防止手机因过于繁忙而出错这里采取了思路方法让手机有充分时间处理发送和接收及删除等操作Sleep正是为此而设计在发送及删除操作后都会让暂停这样就不至于使得手机过于繁忙

手机短信接收

² Unicode码解码



相比于手机短信发送而言手机短信接收主要工作正好和的相反手机短信发送需要将待发送短信内容转换为Unicode码而短信接收则需要将接收到Unicode码转换成中文下面将实现解码功能同手机短信发送编码这里也应用了个VB内置AscW()来将Unicode码转换为中文:



Public Function ascg(smsg As String) As String

Dim si, sb As Integer

Dim stmp As Integer

Dim stemp As String

sb = Len(smsg)

ascg = \"\"

For si = 1 To sb

stmp = AscW(Mid(smsg, si, 1))

If Abs(stmp) < 127 Then

stemp = \"00\" & Hex(stmp)

Else

stemp = Hex(stmp)

End If

ascg = ascg & stemp

Next si

ascg = Trim(ascg)

End Function





² 手机短信接收



相对于短信发送而言短信接收相当简单只需要以下 3行代码就完成了但是它使用技术却决不比短信发送少这里主要用到了MscommControl控件Output属性和AT+CMGR指令



Public Sub readsms(rnum As String)



mobcomm.Output = \"AT+CMGF=1\" + vbCr

mobcomm.Output = \"AT+CMGR=\" & rnum + vbCr

End Sub







Tags:  vb程序设计教程 vb.net教程 vb6.0教程 vb教程

延伸阅读

最新评论

发表评论