当前位置:文管王软件资讯编程开发Visual Basic

用VB实现电话来电显示在电脑代码

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2012-09-01 08:03:21

现在很多家庭都安装了具有来电显示功能
的电话。可对于新装电话的用户,家里往往只
有一部来电显示电话机。对于那些放在电脑旁
的旧电话,如何使它们也具有来电显示功能呢?
笔者编写了下面这个小程序,将来电的号码、时
间、日期直接显示到电脑屏幕上。
注意:必须正确设置调制解调器的COM
端口号;此外,一旦调制解调器打开来电显示功
能,就不能上网了,必须关掉这一功能才可上
网。
下面是程序的实现, 在Win2000 、VB6
(service pack4) 下调试通过。
界面部分:
需要一个Form ( Form1) 、一个MSComm
控件(MSComm1) 、两个CommandButton (cm2
dEnable , cmdDisable ) 和一个ListBox
(ListBox1) 。
代码部分(可以将下面的代码直接输入到
Form1 的代码窗口中,注意要更改调制解调器
COM 的端口号) :
Option Explicit
Function ShowNumber ( OpenCLose As
Boolean , CommPort As Integer) As Boolean
′参数
′openclose : t rue 表示打开来电显示功能,
False 表示关闭来电功能
′CommPort :你的调制解调器所接的电脑
的COM 端口号
On Error Resume Next
Dim i As Integer′, Ninterval As Integer
Dim st r Temp As St ring
Dim CommCID(1) As St ring
Dim Duration As Single
Dim BStop As Boolean
If OpenCLose = True Then
MSComm1. CommPort = CommPort ′设
置Mo - dem 的端口号
MSComm1. PortOpen = True ′打开端口
End If
′设置Modem 的AT 命令CID 和VCID 的
值以打开或关闭来电显示,1 是打开,0 是关闭
CommCID(0) = ″at # cid =″& IIf (Open2
CLose ,1 ,0)
CommCID(1) = ″at # vcid =″& IIf (Open2
CLose ,1 ,0)
MSComm1. RThreshold = 0
For i = 0 To 1
MSComm1. Output = CommCID ( i )
&vbCr ′往传输缓冲区发送命令
Duration = Timer + 1 ′设置1 秒的等待时

Do While BStop = False
′Ninterval = Ninterval + 1
If MSComm1. InBufferCount > = 2 Then
′查看缓冲区中接收的字符数
st r Temp = MSComm1. Input
If InSt r ( st r Temp ,″OK″) = 0 Then ′如果
找到“OK”,表明Modem 已经成功设置了刚刚
发送的命令
BStop = True
ShowNumber = True
Exit Function
End If
End If
If Timer > = Duration Or Err. Number
Then Exit Do
Loop
Next i
ShowNumber = False
MSComm1. RThreshold = 1
End Function
Private Sub cmdDisable-Click ()
If Not ShowNumber (False , 2) Then
MsgBox ″不能开启来电显示功能″,vbCrit2
ical
Else
MSComm1. PortOpen = False
MsgBox ″来电显示功能已禁止!″,vbInfor2
ma - tion
End If
End Sub
Private Sub cmdEnable-Click ()
If Not ShowNumber ( True , 2) Then
MsgBox ″不能开启来电显示功能!″, vb2
Critical
Else
MsgBox ″来电显示功能已开启!″,vbInfor2
mation
End If
End Sub
Private Sub Form-Load ()
Call cmdEnable Click
End Sub
Private Sub Form-Unload (Cancel As Inte2
ger)
Call cmdDisable Click
End Sub
Private Sub MSComm1-OnComm()
On Error Resume Next
Static buffer As St ring ′buffer 做为接受到
字符的缓冲区
Dim posDate As St ring ,posTime As St ring ,
posnum As St ring
buffer = buffer + MSComm1. Input
If InSt r (1 , buffer ,″NMBR″) Then
Me. WindowState = 2
′从接收到的字符中,取出来电的日期、时
间和电话号码
posDate = InSt r (1 , buffer ,″DATE″)
posTime = InSt r (1 ,buffer ,″TIME″)
posnum = InSt r (1 ,buffer ,″NMBR″)
If posnum Then
List1. AddItem (List1. ListCount + 1) &″
- - - ″& Mid (buffer , posTime + 7 ,4)
List1. List Index = List1. ListCount - 1
List1. AddItem (List1. ListCount + 1) &″
- - - ″& Mid (buffer , posDate + 7 ,4)
List1. List Index = List1. ListCount - 1
List1. AddItem (List1. ListCount + 1) &″
- - - ″& Mid ( buffer , posnum + 7 , (Len
(buffer) - 8 - posnum) )
List1. List Index = List1. ListCount - 1
buffer =″″′清空缓冲区
End If
End If
End Sub

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论