以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 请教老师这个怎么判断 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=189843) |
-- 作者:xuzihang -- 发布时间:2023/12/29 18:04:00 -- 请教老师这个怎么判断 请教老师 在窗口里有个按钮 怎么判断对方摘机和挂机,我怎么写都不对, If BriSDKLib.QNV_CTRL_POLARITY Then \'检测反级 msgbox("检测反级!", 64, "提示") If BRI_EVENT.lResult > 0 Then ,这里写的不对, msgbox("对方摘机!", 64, "提示") \' Else BriSDKLib.QNV_GetDevCtrl(Vars("intChannelID"), BriSDKLib.QNV_CTRL_POLARITY, True) Then \' msgbox("对方未摘机或无反级功能!", 64, "提示") End If End If ------------------------------------------------ 以下是参考全局里的代码 \' 拨号后,被叫方摘机事件(该事件仅做参考,原因如下:) \' 原因: \' 该事件只适用于拨打是标准信号音的号码时,也就是拨号后带有标准回铃音的号码. \' 如:当拨打的对方号码是彩铃(彩铃手机号)或系统提示音(179xx)都不是标准回铃音时该事件无效. \' \' 反极信号是模拟线路中唯一可靠的判断对方摘机的方法,只是一方面需要开通才有该功能,另一方面在有些地方,即使申请也未必受理,因为该功能原本是针对公用电话计费的. \' 没有该功能,利用信号音做判断依据,但可靠性不能做到100%,尤其是在被叫方为彩铃时,检测率很低 \' 拥有反级服务方式一:向电信的PSTN线路申请开通,该方式操作性不强,原因如上所述 \' 拥有反级服务方式二:购买一个手机sim/3g卡,再购买一个带反级服务的sim/3g平台设备(200人民币左右),该设备会引出一个电话线接入到USB设备 \'
BRI_EVENT.lResult : 0 为语音信号分析的结果 \'
BRI_EVENT.lResult : 1 为反级检测的结果 Public Const
BriEvent_RemoteHook As Integer = 16
\' 挂机事件 \' 如果线路检测到被叫方摘机后,被叫方挂机时会触发该事件,不然被叫方挂机后就触发BriEvent_Busy事件 \' 该事件或者BriEvent_Busy的触发都表示PSTN线路已经被断开 \' 备注:该事件是根据线路的忙音信号检测,如果没有忙音就不会触发该事件 \' 如果有反级服务就为可靠提示 \'
BRI_EVENT.lResult : 0 为语音信号分析的结果 \'
BRI_EVENT.lResult : 1 为反级检测的结果 Public Const
BriEvent_RemoteHang As Integer = 17 ----------------- \'取得设备的可用模块 Public Function
GetModule(ByVal chID As Int16) As String Dim strModule As String = "" Dim lModule As Long
=BriSDKLib.QNV_DevInfo(chID,BriSDKLib.QNV_DEVINFO_GETMODULE) If(lModule And BriSDKLib.DEVMODULE_DOPLAY)
Then strModule &= "有喇叭/" If(lModule And BriSDKLib.DEVMODULE_CALLID)
Then strModule &= "有来电显示/" If(lModule And BriSDKLib.DEVMODULE_PHONE)
Then strModule &= "话机拨号/" If(lModule And BriSDKLib.DEVMODULE_SWITCH)
Then strModule &= "断开电话机,接收话机按键/" If(lModule And
BriSDKLib.DEVMODULE_PLAY2TEL) Then strModule &= "播放语音到电话机/" If(lModule And BriSDKLib.DEVMODULE_HOOK)
Then strModule &= "软摘机/" If(lModule And BriSDKLib.DEVMODULE_MICSPK)
Then strModule &= "有耳机/MIC/" If(lModule And BriSDKLib.DEVMODULE_RING)
Then strModule &= "模拟话机震铃/" If(lModule And BriSDKLib.DEVMODULE_STORAGE)
Then strModule &= "FLASH数据存储/" If(lModule And BriSDKLib.DEVMODULE_FAX)
Then strModule &= "收发传真/" If(lModule And
BriSDKLib.DEVMODULE_POLARITY) Then strModule &= "反级检测/" Return strModule End Function ------------------------------------------------------------------------------------------------ 以下是二次开的说明 <!--[if !supportLists]-->1.1.1.1 <!--[endif]-->打开/关闭级性反转检测呼叫后对方摘挂机
|
-- 作者:有点蓝 -- 发布时间:2023/12/30 10:16:00 -- 应该是这样吧 if BriSDKLib.QNV_GetDevCtrl(Vars("intChannelID"), BriSDKLib.QNV_CTRL_POLARITY, 1) > 0 then msgbox("成功") else msgbox("失败") end if
|
-- 作者:xuzihang -- 发布时间:2023/12/30 14:13:00 -- 老师谦虚了,永远是我老师。 [此贴子已经被作者于2023/12/30 14:13:06编辑过]
|
-- 作者:有点蓝 -- 发布时间:2023/12/30 14:20:00 -- 全局代码定义的函数不对吧,开发文档QNV_GetDevCtrl是有3个参数的 |
-- 作者:xuzihang -- 发布时间:2023/12/30 14:40:00 -- 就是官方给的案例,没有动,下面的好用 ------------------------------------------------- 例如:窗口里的 按钮(停止拨号) If BriSDKLib.QNV_General(vars("intChannelID"), BriSDKLib.QNV_GENERAL_STOPDIAL, 0, Nothing) > 0 Then BriSDKLib.QNV_SetDevCtrl(Vars("intChannelID"), BriSDKLib.QNV_CTRL_DOHOOK, False) If drCurrentRow IsNot Nothing Then drCurrentRow("挂机时间") = Date.Now End If End If CanAddnew = True CloseContact() ----------------------------------------------------------- 全局代码 Default Public Speaker As
New DotNetSpeech.SpVoice() \'TTS文字转语音 \'\'\' Public EventForm
As FormEventReport Public
drCurrentRow As DataRow Public CanAddnew
As Boolean = True \'录音结构 <StructLayout(LayoutKind.Sequential)>
_ Public Structure
tag_pstn_Data Public uChannelID As Int16 \'设备通道 Public lPlayFileHandle As Int32 \'播放句柄 Public lRecFileHandle As Int32 \'录音句柄 End Structure \'呼叫信息结构,用于号码,录音文件路径等 <StructLayout(LayoutKind.Sequential)>
_ Public Structure
CallLog_Data <MarshalAs(UnmanagedType.ByValArray,
SizeConst: = BriSDKLib.MAX_BRIEVENT_DATA)> _ Public szData As [Byte]() End Structure Public
m_tagpstnData(BriSDKLib.MAX_CHANNEL_COUNT) As tag_pstn_Data \'所有通道的录音结构 。。。。。 --------------------------------------------------------------------- \'页签的全局代码, 和自定义函数和窗口配合 Public Sub
Tab_SelectedTabChanged(ByVal sender As Object, ByVal e As EventArgs) Dim Tab As C1Command.C1DockingTab = sender If Tab.SelectedIndex = 0 Then Tab.CanCloseTabs = False Else Tab.CanCloseTabs = True End If End Sub Public Sub
Tab_TabPageClosing(ByVal sender As Object, ByVal e As
C1.Win.C1Command.TabPageCancelEventArgs)
Functions.Execute("TabPageClosing", sender, e) End Sub Public Sub
Tab_TabPageClosed(ByVal sender As Object, ByVal e As
C1.Win.C1Command.TabPageEventArgs)
Functions.Execute("TabPageClosed", sender, e)
End Sub |
-- 作者:xuzihang -- 发布时间:2023/12/30 14:44:00 -- 这个也好用 BriSDKLib.QNV_SetDevCtrl(Vars("intChannelID"), BriSDKLib.QNV_CTRL_LINEOUT, 1)\'自动打开线路输入开关,如果不打开以上连个开关,就不能正常拨号
|
-- 作者:有点蓝 -- 发布时间:2023/12/30 14:46:00 -- 改为 if BriSDKLib.QNV_GetDevCtrl(Vars("intChannelID"), BriSDKLib.QNV_CTRL_POLARITY) > 0 then
|
-- 作者:xuzihang -- 发布时间:2023/12/30 14:47:00 -- 老师我测试了,没有效果,去电铃声一想起就弹出对话框成功,等真正对方摘机了什么也不提示了; 盒子有反级功能,但是不知道怎么写判断对方摘挂机的状态; [此贴子已经被作者于2023/12/30 14:49:24编辑过]
|
-- 作者:xuzihang -- 发布时间:2023/12/30 14:52:00 -- 老师能不能官方教程里没有加这个全局参数啊 |
-- 作者:有点蓝 -- 发布时间:2023/12/30 15:36:00 -- 摘挂机在全局代码不是有专门的事件判断吗?153~172行 |