中文字幕天天躁日日躁狠狠躁,最近中文字幕大全免费版在线,最近2019免费中文字幕视频三,亚洲精品无码你懂的,亚洲国产精品成人精品小说

  • 相關軟件
    >用VB6.0編寫手機短信發(fā)送 創(chuàng)建者:webmaster 更新時間:2005-07-02 01:43

     因為手機短消息的發(fā)送是以PDU串的形式發(fā)送出去的,中文字符以Unicode碼來表示,所以在發(fā)送中文短消息之前必須首先將中文字符轉(zhuǎn)換為Unicode碼,下面的函數(shù)將實現(xiàn)這個功能。這個函數(shù)主要應用到VB自帶的一個格式轉(zhuǎn)換函數(shù):ChrW()將中文轉(zhuǎn)換為Unicode碼?!?BR>
      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 
      同上,為了發(fā)送以PDU模式發(fā)送短消息,必須將手機號碼和對方手機號碼也轉(zhuǎn)換為PDU格式,下面的函數(shù)就是為了實現(xiàn)這種轉(zhuǎn)換: 

      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),一般手機發(fā)送時都是以13位形式表示的,所以以上的函數(shù)還有一個功能是自動將11位格式手機號碼轉(zhuǎn)換為13位形式,然后再轉(zhuǎn)換為PDU串?! ?

        手機短信的發(fā)送主要借助于VB的Mscomm控件實現(xiàn),關于Mscomm控件,前面的技術介紹部分有詳細介紹。短信的發(fā)送是由AT+CMGS指令完成的,采用PDU模式發(fā)送,函數(shù)代碼如下:

      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  

      因為手機同一時間只能處理一件事情,因此這個函數(shù)只負責發(fā)送短信,關于短信發(fā)送成功與否以及閱讀短信的部分集中在一起處理。判斷手機短信發(fā)送成功與否主要由AT+CMGS命令執(zhí)行以后的返回碼來決定(可參見前文的AT指令介紹部分)。

      為了防止手機因過于繁忙而出錯,這里采取了一定的方法讓手機有充分的時間處理發(fā)送和接收及刪除等操作。Sleep()函數(shù)正是為此而設計的,在發(fā)送及刪除操作后都會讓程序暫停一秒,這樣就不至于使得手機過于繁忙。
      Unicode碼解碼函數(shù)  

      相比于手機短信的發(fā)送而言,手機短信的接收主要的工作正好與之相反。手機短信的發(fā)送需要將待發(fā)送的短信內(nèi)容轉(zhuǎn)換為Unicode碼,而短信的接收則需要將接收到的Unicode碼轉(zhuǎn)換成中文字符。下面的函數(shù)將實現(xiàn)解碼功能。同手機短信發(fā)送的編碼函數(shù)一樣,這里也應用了一個VB內(nèi)置的函數(shù)AscW()函數(shù)來將Unicode碼轉(zhuǎn)換為中文:

      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 

      2 手機短信接收函數(shù) 

      相對于短信的發(fā)送函數(shù)而言,短信的接收相當簡單,只需要以下的三行代碼就完成了。但是它使用的技術卻決不比短信的發(fā)送少,這里主要用到了Mscomm控件的Output屬性和AT+CMGR指令?!?BR>
      Public Sub readsms(rnum As String)
      mobcomm.Output = "AT+CMGF=1" + vbCr
      mobcomm.Output = "AT+CMGR=" & rnum + vbCr
      End Sub 

    相關文章
    本頁查看次數(shù):