yle=\"MARGIN: 13pt 0cm\">手机短信发送 prefix = o ns = \"urn:schemas-microsoft-com:office:office\" />
手机短消息发送是以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
最新评论