以文本方式查看主题

-  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]-->打开/关闭级性反转检测呼叫后对方摘挂机
QNV_CTRL_POLARITY

功能描述 ( Description )

打开/关闭级性反转检测呼叫后对方摘挂机

参数介绍 ( Parameters )

[in] nChannelID

                   控制的通道

[in] nValue

                                                                 0       关闭级性反转摘挂机检测

1       打开级性反转摘挂机检测

返回值 ( Return Values )

大于0表示成功,其它表示失败

备注 (Remarks)

- 对支持该功能的设备才有效

- 反极信号是模拟线路中唯一可靠的判断对方摘机的方法,只是一方面需要开通才有该功能,另一方面在有些地方,即使申请也未必受理,因为该功能原本是针对公用电话计费的。

- 没有该功能,利用信号音做判断依据,但可靠性不能做到100%,尤其是在被叫方为彩铃时,检测率很低

例如 (Example)

QNV_SetDevCtrl(0, QNV_CTRL_POLARITY ,1);


[此贴子已经被作者于2023/12/29 21:15:54编辑过]

--  作者:有点蓝
--  发布时间: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
--  
老师谦虚了,永远是我老师。
报错了,没有参数也没法判断啊
图片点击可在新窗口打开查看此主题相关图片如下:qq图片2323.png
图片点击可在新窗口打开查看
[此贴子已经被作者于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行