每次打开程序时,有可能里面已收到信息了,
但是程序初始化的MSComm1.InBufferCount = 0
MSComm1.OutBufferCount = 0
会清除,即使不用这两句也未必能收到也就是说手机卡里已有CMTI:'SM',1
这样的数据了,但是我打开程序时并不知道。有没有什么方法或命令能知道?难道每次开机用at+cmgr=1 一直到20读一遍?
请做过这方面的给个方法,谢了。

解决方案 »

  1.   

    手机收短消息时不是发"AT+CMGL=4"或"AT+CMGR=?",再应答消息的吗。之前别人发的留在读缓冲区里的数据还有必要关心吗?
      

  2.   

    程序不开短信也会保存,发送"AT+CMGL=4"(UDP模式)或"AT+CMGL=ALL"(Text模式)可以直接获得所有短信,再自己分解吧。
      

  3.   

    2.6.8 AT+CMGL 列举短消息 用户使用该命令来读取某种类型的存储的短消息 命令格式AT+CMGL=<stat> 采用TEXT 方式的响应 +CMGL:<index>,<stat>,<da/oa>[,<alpha>],[<scts>,<tooa/toda>,<length>] <data> +CMGL:<index>…… 采用PDU 方式的响应 +CMGL : <index>,<stat>, [<alpha>], <length> <pdu> +CMGL:<index>…… <stat> 的取值 PDU 方式 TEXT 方式 说 明 0 REC UNREAD 接收未读 1 REC READ 接收已读 2 STO UNSENT 存储未发送 3 STO SENT 存储已发送 4 ALL 所有消息 命 令 AT+CMGL=”REC UNREAD” 列举未读消息 响 应 +CMGL: 1, "REC UNREAD","0146290800", test +CMGL: 3, "REC UNREAD","46290800" hello OK 由2 条未读消息读后其状态变为REC READ
      

  4.   

    成功了,感谢 samwzhang() 。