1,451
社区成员
发帖
与我相关
我的任务
分享
Private Sub Form_Load()
'设置Modem端口,我的Modem是内置的,所以用的是虚拟的 COM 3 端口
MSComm1.CommPort = 3
'设置Modem通讯频率,56kModem
MSComm1.Settings = "56000,N,8,1"
'打开端口
MSComm1.PortOpen = True
'设置以下两个属性为1以上,否则无法接收到 OnComm 事件
MSComm1.RThreshold = 1
MSComm1.SThreshold = 1
'设置输入数据模式为文本模式
MSComm1.InputMode = comInputModeText
'发送起始指令(也可以不送)
MSComm1.Output = "ATZ" & vbCrLf
'激活来电显示(两种AT命令都用一定可以激活,除非Modem不支持来电显示)
MSComm1.Output = "AT#CID=1" & vbCrLf
MSComm1.Output = "AT+VCID=1" & vbCrLf
MSComm1.Output = "AT&W" & vbCrLf '(保存设置)
List1.AddItem "等待响应..."
End Sub
Private Sub MSComm1_OnComm()
Dim 临时字符 As String, 字符组() As String
'通过 CommEvent 属性判断是发生什么事件
Select Case MSComm1.CommEvent
'以下是通讯时发生的事件
Case comEvSend: '在传输缓冲区中有比 Sthreshold 数少的字符。
List1.AddItem "在传输缓冲区中有比 Sthreshold 数少的字符。"
临时字符 = MSComm1.Input
List1.AddItem "↑信息:[ " & 临时字符 & " ]"
List1.AddItem "↑已断开连接..."
Case comEvReceive: '收到 Rthreshold 个字符。该事件将持续产生直到用 Input 属性从接收缓冲区中删除数据。
临时字符 = MSComm1.Input
If InStr(1, 临时字符, "CONNECT", vbTextCompare) Then
List1.AddItem "对方已应答..."
ElseIf InStr(1, 临时字符, "BUSY", vbTextCompare) Then
List1.AddItem "对方线路忙..."
ElseIf InStr(1, 临时字符, "No DIA", vbTextCompare) Then
List1.AddItem "号码不存在..."
ElseIf InStr(1, 临时字符, "No CARRIER", vbTextCompare) Then
List1.AddItem "对方未摘机..."
ElseIf InStr(1, 临时字符, "NMBR", vbTextCompare) Then
字符组 = Split(临时字符, "=")
'这里就是你想要的东西
List1.AddItem "对方电话:" & Trim(字符组(UBound(字符组)))
Else
List1.AddItem "收到信息:[ " & 临时字符 & " ]"
End If
Case comEvRing: '检测到振铃信号。一些 UART(通用异步接收— 传输)可能不支持该事件。
List1.AddItem "★☆★ 电话铃响了 ★☆★"
临时字符 = MSComm1.Input
响铃 Combo1.ListIndex
Case comEvEOF: '收到文件结束(ASCII 字符为 26)字符。
List1.AddItem "收到文件结束(ASCII 字符为 26)字符。"
临时字符 = MSComm1.Input
List1.AddItem "↑信息:[ " & 临时字符 & " ]"
End Select
End Sub