我的程序是用com事件触发来接收短信的,但这样会造成有些信息接收不到,请问各位高人怎么解决这个问题?听说还有一种查询的方式来接收短信,那是怎么回事?谁能给我解释一下好吗?

解决方案 »

  1.   

    Private Sub Timer1_Timer()
        Dim s() As Byte
        Dim SS As String
        If MSComm1.InBufferCount > 0 Then
            s = MSComm1.Input
            SS = s
         End If
    End Sub就是这个意思,推荐使用
      

  2.   

    '可以收到,
    Private Sub Timer1_Timer()
        Dim s() As Byte
        Dim SS As String
        If MSComm1.InBufferCount > 0 Then
            s = MSComm1.Input
            SS = s
            msgbox ss '看看,当然不能这样简单处理,因为用Timer一次读一点,等读出"OK" 
    '或"ERROR"一条信息才算读完,RetString  = RetString + SS  
    'RetString 公共变量 
         End If
    End Sub
      

  3.   

    我写的是这样的,可就是收不到短信, 不知道是什么原因,我设的interval是秒
    Private Sub Timer1_Timer()
       
        Dim sMessage As String
        Dim bt() As Byte
        Dim buf As String
       If MSComm1.InBufferCount > 0 Then
            bt = MSComm1.Input
            buf = bt
            MsgBox "buf" & buf
            sMessage = StrConv(buf, vbUnicode)
        
        End If
        If InStr(sMessage, "+CMTI") > 0 Then
                    lMessageNum = 1
                    sMessageStr = sMessageStr & sMessage
           End If
        If lMessageNum > 0 Then
              sMessageStr = sMessageStr & sMessage
               '判断是否接收到短信
               lIndex = GetMessageTF(sMessageStr)
               MsgBox "lindex is:" & lIndex
               If lIndex <> -1 Then
                    MSComm1.Output = "AT+CMGR=" & CStr(lIndex) & vbCrLf
                    bMsgRec = True
                 End If
                sMessageStr = ""
                lMessageNum = 0
                End If
             
             '获得短信原始信息并进行操作
                If bMsgRec Then
                  If InStr(sMessage, "OK") > 0 Then
                        '已经获得短信全部原始内容,将内容进行解析
                   Call GetMessageStrPDU(sMsg, sreaded, stelNo, dMtime, sMsgContent)
                        '短信接收列表显示
                     sMsg = ""
                     bMsgRec = False
                  Else
                       sMsg = sMsg & sMessage
                End If
                             
    End Sub
      

  4.   

    1 不要用 Timer 定时,使用 MSComm 的 OnComm 事件。
    2 循环等待信息接收完毕。这里使用了Windows API 过程 GetTickCount() 来控制超时。
    Private Sub MSComm_OnComm ()
       If MSComm1.CommEvent = comEvReceive And _
                        MSComm1.InBufferCount > 0 Then
          tt = GetTickCount() + myDelayTime
          bTimeOut = False
          Do
            DoEvents
            If tt > GetTickCount() Then bTimeOut = True: Exit Do
            bt = MSComm1.Input
            buf = bt
            sMessage = StrConv(buf, vbUnicode)
            If InStr(sMessage, "OK") or InStr(sMessage, "Error") Then Exit Do
          Loop
       End If
    End Sub
      

  5.   

    不知道你用的timer是多长时间中断的,短信尤其是接收短信时串口要很长时间才能够完成,因此,有可能你接收到了"+CMTI"但不一定就收全了数据,程序我给你发了一个你试一试。
      

  6.   

    我的timer是1000ms中断一次的
    to lpfreemail(路漫漫): 我还没收到你的程序呀,我这里还有一个很奇怪的事情,就是只有的我自己的手机发送的短信才能全部收到并回复,别人的手机发的数字加字符形式的信息程序不能正确解码。这事真有意思,你觉得会是什么原因呢?