毕设资料-VB+ACCESS电话语音应答系统设计
收藏
资源目录
压缩包内文档预览:(预览前20页/共39页)
编号:67363973
类型:共享资源
大小:8.28MB
格式:ZIP
上传时间:2020-04-05
上传人:独**
认证信息
个人认证
王**(实名认证)
江苏
IP属地:江苏
20
积分
- 关 键 词:
-
资料
VB
ACCESS
电话
语音
应答
系统
设计
- 资源描述:
-
毕设资料-VB+ACCESS电话语音应答系统设计,资料,VB,ACCESS,电话,语音,应答,系统,设计
- 内容简介:
-
江 苏 广 播 电 视 大 学专 业 设 计 报 告题 目 CTI电话语音应答系统 教学点名称 大丰广播电视大学 学 号: 03209020059 专 业: 信息管理与信息系统 层次 本科 姓 名: 严德睿 指导教师: 刘同胜 职称 讲师 指导小组组长: 职称 二五 年 四 月摘要作为目前CTI行业是一个热门的方向,所谓CTI就是计算机电话集成,像我们的114查询台、168台、电话银行、防伪查询等等,都属于CTI应用。这种应用的好处是不言而喻的,许多单位都想使用CTI系统来解决他们企业内部一些无法解决的一些问题。大丰城市规划局也不例外。大丰城市规划局最近使用了城市规划及土地管理业务系统,与以前手工作业比,电脑信息化给他们带来了很大的便利,工作的方式有着明显的改变,工作效率大大的提高了。但是仍存在了一些不足,系统不能够支持手机用户发送短消息功能,同时也不支持远程电话语音应答功能。需要实现一个像168查询台类似的系统,要能具有语音应答、来电显示、电话录音与放音、收发传真、转人工服务等功能,同时具备向手机用户发送短消息功能。如果没有这些功能的话,城市规划局的用户及建设单位不能及时了解到他们想要的信息。首先要说明的是,CTI系统是一个热门的方向,像168,114等这些地方都是用专业的电话语音设备-语音卡来完成的,其成本投入非常高,这也就是目前大多数企业无法得以实施的主要因素。于是我试想用语音猫来解决这个问题,经过我进行了大量的实验得出这样的结论,在电话语音要求不太高的场合,我们可以用30元左右的普通猫来代替语音卡,其实语音猫的功能是非常强大的,不仅能够上网,其实有好多功能我们不少人是不知道的。面临语音卡非常昂贵的问题,于是我想采用普通的语音猫来编写VB程序来解决以上所面临的问题。我首先分析出本系统的功能为以下一些功能:手工接听电话、打电话、挂断电话、语音应答、来电显示、电话录音与放音、转人工服务、收发短消息、收发传真等功能。然后将各项功能进行各自单独设计实验,然后进行组合,也就是我们经常所说的模块化的设计组合各个模块就变成了我们想要的软件。本系统将采用的是Visual Basic 6.0作为开发平台,利用VB特有的可视化设计将系统的界面做到人性化,美观化;利用VB特有的支持串口强大的开发能力与VB本身提供MSCOMM1控件的功能能很方便的来实现利用串口编程对语音猫的控制。从长远利益和发展的观点考虑,对现行的信息管理系统的功能进行适当的改进是十分必要的。通过计算机的先进技术实现工作流程的自动化,不仅能有效的减少工作人员的工作量,便他们从烦琐的手工劳动中解脱出来,提高工作效率、工作质量和节省资源。本软件严德睿来完成,由于开发难度大、同时目前对CTI行业资料不是很多,所以设计出的程序肯定有很多不足之处,需要在使用的过程中对它进行不断改进与完善,使设计出来的软件能更好地运用到实际的工作当中去。在此开发过程中得到了刘同胜老师的悉心指导与开发技术方面的支持。关键字电话应答;CTI;Visual Basic; Mscomm1;TAPI;语音猫;串口;RS-232;电话语音集成.目录摘要及关键词第一章: 引言 51.1 本课题的研究意义 51.2 本论文的目的、内容、及作者的主要贡献5第二章:研究的现状及设计目标 52.1 现行研究存在的问题及解决的方法 52.2 本课题要达到的设计目标6第三章:要解决的几个关键问题 63.1 设计中要解决的问题 63.2 具体实现中采用的关键技术及复杂性分析 6第四章:系统的实现技术 94.1 各模块详述系统各部分的实现方法 94.2 程序流程 10第五章:性能的测试与分析 355.1 测试实例的研究与选择 355.2 测试环境与测试条件 365.3 实例测试375.4 性能分析37第六章:结束语 37致谢 37参考文献37第一章: 引言1.1本课题的研究意义大丰城市规划局最近使用了城市规划及土地管理业务系统,与以前手工作业比,电脑信息化给他们带来了很大的便利,工作的方式有着明显的改变,工作效率大大的提高了。但是仍存在了一些不足,系统不能够支持手机用户发送短消息功能,同时也不支持远程电话语音应答功能。需要实现一个像168查询台类似的系统,要能具有语音应答、来电显示、电话录音与放音、收发传真、转人工服务等功能,同时具备向手机用户发送短消息功能。如果没有这些功能的话,城市规划局的用户及建设单位不能及时了解到他们想要的信息。1.2 本论文的目的、内容、及作者的主要贡献系统能为方便用户及建设单位,系统应能支持手机用户发送短消息功能,同时支持远程电话语单应答功能。实现和168查询台类似的系统,具有语音应答功能。实现和168查询台类似的系统,具有电话手工接听功能、电话手工拨打功能、电话手工挂断、语音应答、来电显示、电话录音与放音、转人工服务、收发传真等功能,同时具备向手机用户发送短消息功能,这样会大减轻用户及建设单位,让他们能及时了解到他们想要的信息。作者解决了从各个不同的角度增进了局与用户的沟通,及时互相的了解一些存在的问题以及及时的掌握信息,以便及时的解决与改进.第二章:研究的现状及设计目标2.1现行研究存在的问题及解决的方法要想能够开发出CTI电话语音应用系统(包括来电显示、语音应答、语音传送,人工坐席,包括发送短消息功能),通常有几种方式,最广泛使用的是语音卡,用它开发出来的系统非常稳定,像现在的168,114,12315等等这些应用都是用语音卡开发的,当然他也有缺点,就是价格非常高。还有一种方式,就是用我们平时所说的语音猫,也就是调制解调器,可能大家对调制解调器还不太熟悉其功能,他主要作用是将数字信号和模拟信号之间互相转换。可能大家以为语音猫只能上上网,其实错了。语音猫的功能非常强大。上网功能,我们只是用了他其中之一的很小的一个功能而已,他还有很多功能我们没有能够发现。比如我们这次研究的对象就是语音猫,实现的功能就是CTI的所有的功能。要能够用VB+语音猫开发本系统,除了上面说的要对串行通信需要一定了解,同时也需要对语音猫的AT命令或者tapi函数也要非常熟悉。首先要说明的是,CTI系统是一个热门的方向,像168,114等这些地方都是用专业的电话语音设备-语音卡来完成的,其成本投入非常高,这也就是目前大多数企业无法得以实施的主要因素。于是我试想用语音猫来解决这个问题,经过我进行了大量的实验得出这样的结论,在电话语音要求不太高的场合,我们可以用30元左右的普通猫来代替语音卡,其实语音猫的功能是非常强大的,不仅能够上网,其实有好多功能我们不少人是不知道的。面临语音卡非常昂贵的问题,于是我想采用普通的语音猫来编写VB程序来解决以上所面临的问题。我首先分析出本系统的功能为以下一些功能:手工接听电话、打电话、挂断电话、语音应答、来电显示、电话录音与放音、转人工服务、收发短消息、收发传真等功能。然后将各项功能进行各自单独设计实验,然后进行组合,也就是我们经常所说的模块化的设计组合各个模块就变成了我们想要的软件。本系统将采用的是Visual Basic 6.0作为开发平台,利用VB特有的可视化设计将系统的界面做到人性化,美观化;利用VB特有的支持串口强大的开发能力与VB本身提供MSCOMM1控件的功能能很方便的来实现利用串口编程对语音猫的控制。2.2 本课题要达到的设计目标本课题要达到以下几个功能:1.来电显示 2.来电应答 3.打电话 4.放音 5.录音 6.发短消息,7收发传真.第三章:要解决的几个关键问题3.1设计中要解决的问题要实现本系统,就必须用语音猫+vb解决以下几个问题:1.来电显示 2.来电应答 3.打电话 4.放音 5.录音 6.发短消息,7收发传真.3.2 具体实现中采用的关键技术及复杂性分析要能用语音猫来实现上述想实现的功能,我们首先要对语音猫和串行通信有着深刻的了解,同时要对语音猫的AT命令与TAPI函数要非常的了解,可能大家都要问,什么是AT命令呢?和人一样,人与人交流最主要是是用语言来交流,那么我们要和语音猫交流的话,就要我们人必须要懂语音猫能看得懂的AT命令。也就是说,语音猫只能看得懂AT命令。什么叫TAPI呢?TAPI是指与电话有关的API函数,下面我就列出了所有的TAPI函数。我进行CTI系统进行开发时,采用自上而下软件开发方法,一个大系统分成许多模块来开发的。也就是说,要实现一个大目标,我们把他分成许多个小模块来实现的。我把本系统为成了以下几个小模块:1.来电显示 2.来电应答 3.打电话 4.放音 5.录音 6.发短消息,7收发传真.下面就让我详细说明这些功能设计的步骤。TAPI函数简介:Option Explicit 所有变量都必须先定义后使用Public Const LINEDIGITMODE_DTMF = &H2线路为数字模式Public Const TAPIVERSION = &H10004TAPI函数的版本号为:1.04Public Declare Function lineMonitorDigits Lib Tapi32 (ByVal hCall As Long, ByVal dwDigitModes As Long) As LongPublic Declare Function lineGenerateDigits Lib Tapi32 (ByVal hCall As Long, ByVal dwDigitMode As Long, ByVal lpszDigits As String, ByVal dwDuration As Long) As Long得到来电号码、来电时间等信息 Public Declare Function lineGetCallInfo Lib Tapi32 (ByVal hCall As Long, ByRef lpCallInf As lineCallInfo) As Long电话线路初使化Public Declare Function lineInitialize Lib Tapi32 (ByRef hTAPI As Long, ByVal hInst As Long, ByVal fnPtr As Long, ByRef szAppName As Long, ByRef dwNumLines As Long) As LongPublic Declare Function lineNegotiateAPIVersion Lib Tapi32 (ByVal hTAPI As Long, ByVal dwDeviceID As Long, ByVal dwAPILowVersion As Long, ByVal dwAPIHighVersion As Long, ByRef lpdwAPIVersion As Long, ByRef lpExtensionID As lineextensionid) As Long打开电话线路Public Declare Function lineOpen Lib Tapi32 (ByVal hLineApp As Long, ByVal dwDeviceID As Long, ByRef lphLine As Long, ByVal dwAPIVersion As Long, ByVal dwExtVersion As Long, ByRef dwCallbackInstance As Long, ByVal dwPrivileges As Long, ByVal dwMediaModes As Long, ByRef lpCallParams As Long) As LongPublic Declare Function lineGetDevCaps Lib Tapi32 (ByVal hLineApp As Long, ByVal dwDeviceID As Long, ByVal dwAPIVersion As Long, ByVal dwExtVersion As Long, ByRef lpLineDevCaps As linedevcaps) As Long线路设置特定的状态信息Public Declare Function lineSetStatusMessages Lib Tapi32 (ByVal hLine As Long, ByVal dwLineStates As Long, ByVal dwAddressStates As Long) As Long打电话Public Declare Function lineMakeCall Lib Tapi32 (ByVal hLine As Long, ByRef lphCall As Long, ByVal lpszDestAddress As String, ByVal dwCountryCode As Long, ByVal lpCallParams As Long) As Long挂电话 Public Declare Function lineDrop Lib Tapi32 (ByVal hCall As Long, ByVal lpsUserUserInfo As String, ByVal dwSize As Long) As Long挂电话,释放资源Public Declare Function lineShutdown Lib Tapi32 (ByVal hLineApp As Long) As Long应答电话Public Declare Function lineAnswer Lib Tapi32 (ByVal hCall As Long, ByRef lpsUserUserInfo As String, ByVal dwSize As Long) As Long得到是哪一条线路正在使用,获得一个ID号Public Declare Function lineGetID Lib Tapi32 (ByVal hLine As Long, ByVal dwAddressID As Long, ByVal hCall As Long, ByVal dwSelect As Long, ByRef lpDevice As varString, ByVal lpszDeviceClass As String) As LongPublic Declare Function lineDeallocateCall Lib Tapi32 (ByVal hCall As Long) As Long第四章:系统的实现技术4.1模块详述系统各部分的实现方法本人最初的想法是对大丰城市规划及土地管理业务系统的缺陷的一个补充,软件要能实现CTI的如下功能:1.来电显示 2.来电应答 3.打电话 4.放音 5.录音 6.收发短消息7收发传真.其功能详细描述如下:程序启动后,首先初始化猫来电去电处理收发传真收发短消息收短消息管理发短消息 管理收传真发传真来电第一声响铃(没有任何信号)挂断询来电第二声响铃(电信局送来电显示信号)我们这时要去读MODERM内存信息,就是我们要的电话号码,当然还包括来电时间.来电接听去电录音、放音42程序流程在设计之前所要强调的是:要购买一个外置式的猫,同时电话还要开通家家E功能。为什么要开通家家E功能,因为我们发送的短消息是通过家家E的功能来与手机、小灵通相互联系的。有了这些准备后,将猫接在计算机的串口上,正确地装好驱动程序。来电显示功能的实现(首先要向电信局开通来电显示功能):Private Sub V_CallerID(ByVal LineIndex As Integer, ByVal CallerID As String)当电话来的时候响应,一般在来电的第二声电信局送电话号码信息到电话机上面。showMsg CallerID: & CallerID Callerid就是指的来电号码End Sub过程结束Private Sub V_Connected(ByVal LineIndex As Integer, ByVal fInComing As Boolean)当电话接通时,产生该事件,这时将显示哪条线路,有没有来电。V.SetCurLine LineIndex 程序设定哪条线路将接通If fInComing Then如果有哪条线路被接通,则显示哪条线路被接通。showMsg CStr(LineIndex) + Line connected after answering( + V.LineName + )显示哪一条线路被接通ElseshowMsg CStr(LineIndex) + line connected( + V.LineName + )End IfcmdDrop.Enabled = True挂断按钮生效If OptLine.Value Then如果录音是否被选中,则去检测声音文件是否存在,注明:dir是查找文件的意思. If Not (Dir(record.wav) = And optPlayFileRecorded.Value) ThencmdStartOrStopPlay.Enabled = True End If 播放或停止按钮有效 cmdStartOrStopRecord.Enabled = True播放或停止按钮有效ckMonitorSilence.Enabled = True静默按钮有效 End IfckMonitorDigit.Enabled = True 检测按键有效 cmdGatherDigits.Enabled = True 收集按键信息按钮有效 framGatherDigits.Enabled = True收集按键信息框架有效 ckUseSpeakerphone.Enabled = True 卖克风有效 cmdGenerateDigits.Enabled = True 一般按键有效 CallState = CALL_STATE_CONNECTED 当前线路状态是已联接End SubEnum CALL_STATE 定义枚举变量类型CALL_STATE,用来标记当前线路的状态。 CALL_STATE_IDLE 空闲 CALL_STATE_DIALING 正在拨号 CALL_STATE_CONNECTED 电话接通End Enum 结束枚举Private CallState As CALL_STATE 将CallState定义为CALL_STATE类型的变量Private Sub ckMonitorDigit_Click() 检测按键单击产生以下事件。V.MonitorDigit ckMonitorDigit.Value 是否检测按键,Ckmonitordigit.value有两种值,checked 或 uncheckedEnd SubPrivate Sub ckMonitorSilence_Click()检测静默If ckMonitorSilence.Value Then 如果静默被选中则V.MonitorSilence CLng(txtTimeForSilence.Text)则指定期静默时间,时间由txttimeforsilence文本内的内容决定。cmdStartOrStopPlay.Enabled = False开始或停止按钮失效。Else 否则V.MonitorSilence 0静默0秒钟cmdStartOrStopPlay.Enabled = True开始或停止按钮有效。 End IfEnd Sub 结束过程Private Sub ckUseSpeakerphone_Click()ckusespeakerphone一点击就触发以下事件:V.EnableSpeakerPhone IIf(ckUseSpeakerphone.Value = 1, True, False)是否允许耳卖有效,这里iif就相当于 if(ckusespeakerphone.value=1 thenv.enabelspeakerphone=true 可以用耳卖讲话elsev.enabelspeakerphone=flase 不可以用耳卖讲话endifIf V.ErrorNumber Then showMsg V.ErrorDescribe如果出现错误,则显示错误原因 End SubPrivate Sub cmbLines_Click() 选择线路V.Close 则关闭当前联接V.SetCurLine (cmbLines.ListIndex)设置当前线路为cmblines.listindex V.Open打开刚刚选择的线路cmdDial.Enabled = True拨打电话按钮有效V.LineForShowWave = cmbLines.ListIndex当前播放声音指向当前线路If V.ErrorNumber 0 Then如果有错误产生,则显示错误showMsg V.ErrorDescribeEnd If调用挂断电话程序cmdDrop_Click以下程序是判断语音猫还是语音卡.If V.LineType = 2 Or V.OperateMode = 1 Then 语猫 Voice modemcmbWaveFormat.ListIndex = 0设置指定的语音格式cmbWaveFormat.Enabled = Falsecmbwaveformat选择框无效ElseIf V.LineType = 3 Then 语音卡 Voice boardcmbWaveFormat.ListIndex = 1设置指定语音格式cmbWaveFormat.Enabled = Truecmbwaveformat有效End IfEnd Sub接听电话效果Private Sub cmdAnswer_Click() 开始接听电话V.Answer设置当前状态为电话接通状态CallState = CALL_STATE_CONNECTEDEnd Sub取消传真设置Private Sub cmdCancelFax_Click()取消传真V.CancelFaxEnd Sub打电话功能实现Private Sub cmdDial_Click()等待连接V.SetWaitTimeForConnection 60 CLng(txtConnectTimeout.Text)打相应电话号码,txttelnum.text里面存放的就是要拨打的电话号码。V.Dial txtTelNum.Text设置当前状态为打电话状态CallState = CALL_STATE_DIALING电话挂断按钮为真cmdDrop.Enabled = TrueEnd Sub挂断电话功能实现Private Sub cmdDrop_Click()挂断电话V.Drop挂断电话按钮变成灰色cmdDrop.Enabled = FalseIf OptLine.Value Then cmdStartOrStopPlay.Enabled = False 播放或停止按钮无效 cmdStartOrStopRecord.Enabled = False录音或停止按钮无效 ckMonitorSilence.Enabled = False静默功能无效 End IfckMonitorDigit.Enabled = False 检测按键功能无效 cmdGatherDigits.Enabled = False framGatherDigits.Enabled = False CallState = CALL_STATE_IDLE 致当前线路状态空闲 cmdGenerateDigits.Enabled = False ckUseSpeakerphone.Enabled = False End Sub收集当前按钮按键信息Private Sub cmdGatherDigits_Click()收集按键信息 收集的数量存入在txtdigitscount.text中V.GatherDigits CInt(txtDigitsCount.Text), 收集终止按键信息txtTerminateDigit, CLng(txtFirstDigitTimeout), CLng(txtInterTimeout)End Sub一般按键信息收集功能Private Sub cmdGenerateDigits_Click()收集按键信息V.GenerateDigits txtDigitsToGenerate.Text挂断电话有效cmdDrop.Enabled = TrueEnd Sub接受传真功能实现Private Sub cmdReceiveFax_Click()将接受的传真保存到期 d:faxreceived.tif文件中V.ReceiveFax faxreceived.tif D:faxreceived.tifIf V.ErrorNumber Then有错误信息不等于0,则也就是说有错误产生显示错误信息 showMsg V.ErrorDescribeEnd IfEnd Sub发送传送功能:Private Sub cmdSendFax_Click()如果电话状态是空闲则接受传真 If CallState = CALL_STATE_IDLE ThenV.SendFax hello.tif, txtTelNum.Text 将“hello.tif”文件送到指定的电话号码中,txtelnum.text存入是电话号码D:faxfaxCodetookit.tif, 6211478Else如没有电话号码,则表示不发送传真。V.SendFax hello.tif, End If如果有错误产生,则显示错误提示.If V.ErrorNumber Then showMsg V.ErrorDescribeEnd If允许挂断电话cmdDrop.Enabled = TrueEnd Sub开始播放或停止播放功能Private Sub cmdStartOrStopPlay_Click()If cmdStartOrStopPlay.Caption = 播放 Then 现在将要开始播放语音If optPlayFileRecorded.Value Then Play the file recorded如果播放语音按钮被选中,则开始播放记录 V.OpenWaveFile record.wav打开record.wav文件进行播放如果有错误产生,则显示错误 If V.ErrorNumber ThenshowMsg V.ErrorDescribe退出过程 Exit SubEnd IfElse播放一些数字,合成数字 Play some digits ,each digit has a corresponding wave file产生一个新的临时文件V.NewWaveFile digits.wav, 0, 0, 0如果有错误,则显示错误原因If V.ErrorNumber ThenshowMsg V.ErrorDescribe退出过程Exit SubEnd IfDim Digit As String, i As Integer定义两个变量,一个要存放要读的数字信息,一个存入数字的个数.For i = 1 To Len(txtDigits.Text)遍列整个digitDigit = Mid(txtDigits.Text, i, 1)获得每一个数字判断是否为数字,如果是的话:If IsNumeric(Digit) Then就追加书写文件V.AppendWaveFile Digit + .wav如果有错误,则显示错误If V.ErrorNumber ThenshowMsg V.ErrorDescribeExit Sub退出过程End IfEnd If一个做完后,执行下一个Next I当我们做完后,我们将文件的指向要指向文件的头。V.SeekWaveFile 0 after we appended all the wave file,the current position of the wave file are moved to the tail of the file,so we need to seek it to the head of the file如果有错误产生,则显示错误如果有错误,则显示错误信息If V.ErrorNumber ThenshowMsg V.ErrorDescribe退出过程Exit SubEnd IfEnd IfDim nEquip As Integer定义设备文件If OptLine.Value = True Then0表示线路nEquip = 01表示声卡ElseIf optSoundCard.Value = True ThennEquip = 1Else2表示耳卖nEquip = 2End If指定好播放设备后,我们开始向指定的设备开始播放文件 V.StartPlaying nEquip, False如果有错误,则显示错误信息If V.ErrorNumber ThenshowMsg V.ErrorDescribe退出过程Exit SubEnd If开始/停止播放变为停止cmdStartOrStopPlay.Caption = 停止开始/停止录音按钮失效cmdStartOrStopRecord.Enabled = False如果开始/停止播放按钮为停止,则开始播放ElseIf cmdStartOrStopPlay.Caption = 停止 Then now stop playing停止现在正在播放的内容V.Stop开始/停止播放按钮变成播放cmdStartOrStopPlay.Caption = 播放开始/停止录音按钮有效cmdStartOrStopRecord.Enabled = TrueEnd IfEnd Sub录音功能实现Private Sub cmdStartOrStopRecord_Click()Dim Result As Integer定义结束变量If cmdStartOrStopRecord.Caption = 录音 Then如此按钮的值为开始录音的话If cmbWaveFormat.ListIndex = 0 Then 如果格式为第一种格式的话,产生一个格式为1,8000,16的新文件.V.NewWaveFile record.wav, 1, 8000, 16如果格式为第二种的话,产生一个格式为1,8000,8的新文件。 ElseIf cmbWaveFormat.ListIndex = 1 ThenV.NewWaveFile record.wav, 1, 8000, 8如果格式为第三种的话,产生一个格式为1,11025,8的新文件。ElseIf cmbWaveFormat.ListIndex = 2 ThenV.NewWaveFile record.wav, 1, 11025, 8End If如果有错误产生,则显示错误。If V.ErrorNumber ThenshowMsg V.ErrorDescribeExit SubEnd If定义设备名称 Dim nEquip As Integer如果线路选中,则If OptLine.Value = True Then设备名称为0,即为线路 nEquip = 0 ElseIf optSoundCard.Value = True Then否则指向声卡 nEquip = 1 Else否则声音文件转向耳卖 nEquip = 2End If指定好设备后,开始向指定设备开始录音V.StartRecording nEquip, False如果有错误,则显示错误信息If V.ErrorNumber ThenshowMsg V.ErrorDescribe退出过程Exit SubEnd IfcmdStartOrStopRecord.Caption = 停止cmdStartOrStopPlay.Enabled = FalseElseIf cmdStartOrStopRecord.Caption = 停止 Then停止录音V.Stop关闭当前声音文件V.CloseWaveFilecmdStartOrStopRecord.Caption = 录音If ckMonitorSilence.Value = 0 Then cmdStartOrStopPlay.Enabled = True when monitoring silence ,we can not play wave fileEnd IfEnd SubPrivate Sub Command1_Click()关闭对象V.CloseEnd SubPrivate Sub Form_Load()各种设备的初始化Gatdibz = False进行初使化 V.Initialize For i = 1 To V.LineCount对各条线路进行初使化V.SetCurLine (i - 1)加入线路选择中去cmbLines.AddItem V.LineNameNext iIf V.LineCount 0 Then如果系统内有线路产生,则指向第一条线路 V.SetCurLine 0 the default line is the number 0cmbLines.Text = V.LineName打开此线路V.OpenIf V.LineType = 2 Or V.OperateMode = 1 Then 该条线路是语音猫 Voice modecmbWaveFormat.ListIndex = 0cmbWaveFormat.Enabled = FalseElseIf V.LineType = 3 Then 该线路是语音卡 Voice boardcmbWaveFormat.ListIndex = 1cmbWaveFormat.Enabled = TrueEnd IfEnd If如果当前工作模式是TAPI形式:则If V.OperateMode = 0 Then传真功能无法使用cmdSendFax.Enabled = FalsecmdReceiveFax.Enabled = FalseMe.Caption = Me.Caption + 当前工作模式:TAPIElse显示当前猫的工作模式Me.Caption = Me.Caption + 当前工作模式:AT COMMANDEnd If显示当前日期信息StatusBar1.Panels(2).Text = 当前日期: & DateEnd Sub如果关闭系统,则关闭资源Private Sub Form_Unload(Cancel As Integer)V.ShutDownEnd SubPrivate Sub OptLine_Click()如果当前状态处于联接状态的情况下If CallState = CALL_STATE_CONNECTED ThencmdStartOrStopPlay.Enabled = FalsecmdStartOrStopRecord.Enabled = FalseckMonitorSilence.Enabled = FalseEnd IfEnd SubPrivate Sub optPlayDigitsFiles_Click()txtDigits.Enabled = optPlayDigitsFiles.ValueEnd Sub声卡放音功能Private Sub optSoundCard_Click()If optSoundCard.Value Then If Dir(record.wav) Then cmdStartOrStopPlay.Enabled = True End IfcmdStartOrStopRecord.Enabled = TrueckMonitorSilence.Enabled = TrueEnd IfEnd SubPrivate Sub Text1_Change()End SubPrivate Sub txtTelNum_Change()cmdDial.Enabled = TrueEnd Sub线路忙的功能的显示Private Sub v_Busy(ByVal LineIndex As Integer)showMsg CStr(LineIndex) + BusycmdDrop.Enabled = TruecmdGenerateDigits.Enabled = TrueEnd Sub挂断电话或忙音提示功能Private Sub v_BusyOrShutdown(ByVal LineIndex As Long)showMsg CStr(LineIndex) + Busy or shutdownEnd Sub来电显示功能,callerid就是电话号码Private Sub V_CallerID(ByVal LineIndex As Integer, ByVal CallerID As String)showMsg CallerID: & CallerIDEnd Sub电话已经联接时产生以下事件,将显示哪条线路被接通。Private Sub V_Connected(ByVal LineIndex As Integer, ByVal fInComing As Boolean)V.SetCurLine LineIndexIf fInComing ThenshowMsg CStr(LineIndex) + Line connected after answering( + V.LineName + )Else showMsg CStr(LineIndex) + line connected( + V.LineName + )End IfcmdDrop.Enabled = TrueIf OptLine.Value ThenIf Not (Dir(record.wav) = And optPlayFileRecorded.Value) Then cmdStartOrStopPlay.Enabled = TrueEnd IfcmdStartOrStopRecord.Enabled = TrueckMonitorSilence.Enabled = True End IfckMonitorDigit.Enabled = True cmdGatherDigits.Enabled = True framGatherDigits.Enabled = True ckUseSpeakerphone.Enabled = True cmdGenerateDigits.Enabled = True CallState = CALL_STATE_CONNECTEDEnd Sub产生侦察到的数字信息,按什么键就显示什么键Private Sub V_DigitDetected(ByVal LineIndex As Long, ByVal Digit As String) txtInfo.Text = txtInfo.Text + Chr(13) + Chr(10) + Digit Detected: & DigitEnd Sub不连接事件Private Sub V_Disconnected(ByVal LineIndex As Long)showMsg DisconnectedV.Stop停止播放声音文件V.CloseWaveFile关闭声音文件V.Drop挂断电话End Sub传真结果信息,产生相应的信息Private Sub v_FaxResult(ByVal LineIndex As Long, ByVal Result As Long, ByVal ResultDes As String)showMsg ResultDesEnd Sub传真的状态,显示信息Private Sub v_FaxStatus(ByVal LineIndex As Long, ByVal StatusID As Long, ByVal StatusDes As String)showMsg StatusDesEnd Sub传真信息是否收集到,如果有则产生提示信息Private Sub v_FaxtoneDetected(ByVal LineIndex As Long)showMsg Fax tone detected!End Sub收集并显示按键信息功能Private Sub V_GatherDigits(ByVal LineIndex As Integer, ByVal Digits As String, ByVal Result As Integer) If Result = 1 Then完成按键信息并显示出来 showMsg Finish Gathering Digits: & Digits ElseIf Result = 2 Then showMsg Finish Gathering Digits: & Digits3表示收集时超时 ElseIf Result = 3 ThenshowMsg Timeout while Gathering Digits显示错误信息“收集按键时超时” ElseIf Result = 4 ThenshowMsg Timeout while Gathering Digits显示错误信息“收集按键时超时” End If End Sub播放完成产生此事件Private Sub V_PlayDone(ByVal LineIndex As Long)V.SetCurLine LineIndex指定播放的线路 V.CloseWaveFile关闭声音文件 showMsg 播放完毕 cmdStartOrStopPlay.Caption = 播放 cmdStartOrStopRecord.Enabled = True 开始或停止录音的按钮有效End SubPrivate Sub V_RingBack(ByVal LineIndex As Long, ByVal nRing As Long)showMsg Ring Back + CStr(nRing)显示几声回铃声End Sub当有振铃时产生此信息Private Sub V_Ringing(ByVal LineIndex As Integer, ByVal numRing As Integer)cmdAnswer.Enabled = True显示第几次振铃showMsg the + CStr(numRing) + RingEnd SubShowmsg函数,strmsg将要显示的内容Sub showMsg(strMsg As String)txtInfo.Text = txtInfo.Text + Chr(13) + Chr(10) + strMsg选中整个文本txtInfo.SelStart = Len(txtInfo.Text)End Sub当静默时产生此事件,提示静默信息Private Sub V_Silence(ByVal LineIndex As Long)showMsg Silence Detected显示静默已经检测到了End Sub当按键超时时产生此事件,这时会提示您在拨号时超时.Private Sub V_WaitConnectionTimeOut(ByVal LineIndex As Integer)showMsg Timout while Dialing显示电话无人接听End Sub当线路连接时产生此事件。Private Sub VoiceAngel1_Connected(ByVal LineIndex As Integer, ByVal fInComing As Boolean)End SubdlgSetup contains a few trivial items (such as which voice card to use) andstores/retrieves them from:HKEY_CURRENT_USERSoftwareVB and VBA Program SettingsVB-TAPISettingsOption ExplicitCenter the dialog on the main form and get the settings from the registry.Private Sub Form_Load()窗口在装载前产生以下事件 Me.Top = frmMain.Top + (frmMain.Height - Me.Height) / 2) 让窗口显示在屏幕的中间 Me.Left = frmMain.Left + (frmMain.Width - Me.Width) / 2) txtMsgLen = GetSetting(VB-TAPI, Settings, MaxMessage, 60) 从注册表中读取消息的最大长度 txtRTA = GetSetting(VB-TAPI, Settings, NumRings, 5)txtTollSaver = GetSetting(VB-TAPI, Settings, TollSaver, 3)响铃几声开始应答 txtSecret = GetSetting(VB-TAPI, Settings, Secret, 123)End SubThe Resize event is called when ever the form is shown, not loaded. This isa good thing since the enumeration of the TAPI devices is lengthy and thisform is used to store/retrieve all are settings at runtime.frmMain.myInit is called with a flag denoting its use for this form. Allthe init function will do is init TAPI and attempt to negotiate a TAPI versionof 1.4. See frmMain.myInit for more on attempt.Once we have completed initialization we loop through all the devices and puttheir names in the list box cmbDevice. When this form unloads the index of这些信息将保存在注册表中,以便我们在程序中使用。Private Sub Form_Resize()当窗口改变大小时产生以下事件Dim lpLineDevCaps As linedevcapsDim lLoop As LongDim lUnused As LongDim nError As LongOn Error GoTo EH如果产生错误,程序直跳转到EH行 Screen.MousePointer = vbHourglass 屏幕鼠标的指针将变成忙的状态frmMain.myInit True 程序主窗口开始初始化数据 For lLoop = 0 To lNumLines lpLineDevCaps.dwTotalSize = Len(lpLineDevCaps) nError = lineGetDevCaps(hTAPI, lLoop, lNegVer, lUnused, lpLineDevCaps)If nError 0 Then如果有错误,直跳过 Skip it Else Dim sTemp As String Dim lTemp As Long Dim lStart As Long Find the true length of the lpLineDevCaps UDT (Subtract The Hack!) lStart=Len(lpLineDevCaps)-UBound(lpLineDevCaps.bBytes() With the actual length we can now index into the appended info. Somebody is off by one here, must be the VB start at one instead of zero thing. lStart = lpLineDevCaps.dwLineNameOffset - lStart + 1For lTemp = 0 To lpLineDevCaps.dwLineNameSize If lpLineDevCaps.bBytes(lStart + lTemp) = 0 Then Exit For Could I simply use Left() here as opposed to the loop? (Nope ed.) sTemp=sTemp&CStr(Chr(lpLineDevCaps.bBytes(lStart+lTemp) Next End If If sTemp = Then cmbDevice.AddItem Unknown Else cmbDevice.AddItem sTemp End If sTemp = Next Screen.MousePointer = vbNormal 屏幕鼠标变成正常状态 cmbDevice.ListIndex = GetSetting(VB-TAPI, Settings, DeviceID, 0) 从注册表中调用语音设备,退出过程 Exit SubEH:错误产生时:鼠标恢复到正常状态,同时显示错误原因Screen.MousePointer = vbNormalMsgBox err.Number & : & err.DescriptionEnd SubMake sure we shut down TAPI and reset the mouse cursorPrivate Sub Form_Unload(Cancel As Integer)窗口unload时产生以下事件On Error Resume Next如果有错误,就忽略frmMain.myInit True初使化主程序窗口Screen.MousePointer = vbNormal鼠标变成正常End SubPrivate Sub OKButton_Click()SaveSetting VB-TAPI, Settings, MaxMessage, txtMsgLenSaveSetting VB-TAPI, Settings, NumRings, txtRTASaveSetting VB-TAPI, Settings, TollSaver, txtTollSaverSaveSetting VB-TAPI, Settings, Secret, txtSecretSaveSetting VB-TAPI, Settings, DeviceID, CStr(cmbDevice.ListIndex)将必要的信息保存到注册表中Unload MeEnd SubPrivate Sub CancelButton_Click()退出关闭时就关闭该窗口 Unload MeEnd SubCorrect, these do not check if you put in a negativ
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。