CSDN博客

img abaowu

在网页中实现点击某一电话号码后拨通ip电话

发表于2004/9/24 23:33:00  2720人阅读

分类: ASP

拨通电话的功能程序只能用服务商提供的,Web上所要做的是调用该Com组件,呵呵,就看这种组件提供的接口了。  
---------------------------------------------------------------  
 
<!--    
           
--------------------------------------------------------------------------  
 
该页面可以让使用者呼叫指定的地址和接受呼叫。  
电话操作有:创建、连接、应答、挂机  
在收到打入电话振铃的时候,可以设置电话的优先权  
QOS保证(QoS一般从呼叫建立时间、丢包率、抖动(延迟变化)、MOS值和端到端时延几个方面来评价。)  
管理视频需要用到tapi控件的IVideoWindow属性,而在vbscript中获取不到window的handle,所以视频是不可以调用的。  
注意:调用IVideoWindow属性只能在"stream  active"事件发生时  
--------------------------------------------------------------------------  
   
 -->  
 
<html>  
<head>  
<meta  content="text/html;  charset=gb2312"  http-equiv="Content-Type">  
<title>sinodigital</title>  
 
<SCRIPT  LANGUAGE="JavaScript"><!--  
 
       var  ua  =  navigator.userAgent;  
       var  an  =  navigator.appName;  
 
       //  Is  it  IE?  
       bMSIE  =  (ua.indexOf("MSIE")>=1);  
       if  (!  bMSIE)  
       {  
         alert("只能在ie中运行");  
         window.close;  
       }  
//-->  
</SCRIPT>  
 
 
<script  LANGUAGE="VbScript">  
 
 
'下列常量从tapi3if.idl中拷贝  
Const  TAPIMEDIAMODE_AUDIO    =  &H08&  
Const  TAPIMEDIAMODE_VIDEO  =  &H8000&  
Const  S_MEDIA_AUDIOVIDEO  =  &H8008&  
Const  TD_CAPTURE    =  0  
Const  TD_RENDER  =  1  
Const  QSL_NEEDED  =  1  
Const  AS_INSERVICE  =  0  
Const  DC_NORMAL  =  0  
Const  TE_CALLSTATE  =  8  
Const  TE_CALLNOTIFICATION  =  4  
Const  CS_DISCONNECTED  =  3  
Const  CS_IDLE  =  0  
Const  CS_OFFERING  =  4  
Const  CS_CONNECTED  =  2  
Const  CNE_OWNER  =    0  
Const  CIS_CALLERIDNAME  =  0  
'IDs接口  
'可以在tapi3.idl,  tapi3if.idl,  rend.idl中找到  
 
Const  IID_String_ITMediaSupport  =  "{B1EFC384-9355-11D0-835C-00AA003CCABD}"  
Const  IID_String_ITTerminalSupport="{B1EFC385-9355-11D0-835C-00AA003CCABD}"  
Const  IID_String_ITBasicCallControl  =  "{B1EFC389-9355-11D0-835C-00AA003CCABD}"  
 
'Const  IID_String_ITCallInfo  =  "{B1EFC390-9355-11d0-835C-00AA003CCABD}"  
 
Const  IID_String_ITCallInfo  =  "{350F85D1-1227-11D3-83D4-00C04FB6809F}"  
Const  IID_String_ITStreamControl=  "{EE3BD604-3868-11D2-A045-00C04FB6809F}"  
Const  IID_String_ITDirectoryObjectConference=  "{F1029E5D-CB5B-11D0-8D59-00C04FD91AC0}"  
Const  IID_String_ITCallStateEvent  =  "{62F47097-95C9-11d0-835D-00AA003CCABD}"  
Const  IID_String_ITCallNotificationEvent  =  "{895801DF-3DD6-11d1-8F30-00C04FB6809F}"  
 
 
Const  IID_String_IVideoWindow  =  "{56A868B4-0AD4-11CE-B03A-0020AF0BA770}"  
 
'下面这个CLSID  tapi3.h  的定义  
 
Const  CLSID_String_VideoWindowTerm  =  "{F7438990-D6EB-11d0-82A6-00AA00B5CA1B}"  
 
 
'****************************************************************************  
'全局变量  
'****************************************************************************  
'设置成true,可以在不能完成连接的时候跳过  
 
DIM  sUnableToComplete  
DIM  sbNeedToExit  
sUnableToComplete  =  False  
sbNeedToExit  =  False  
 
 
DIM  pRegisteredCallNotification(50)  
DIM  pRegisteredName(50)  
DIM  iQtaRegistered  
iQtaRegistered  =  0  
 
 
 
DIM  sCurrentAddressType  
sCurrentAddressType  =  -1  
 
DIM  spITCall    
spITCall  =  Empty  
 
 
DIm  pVideoWindow1  
DIm  pVideoWindow2  
 
</script>  
 
 
<script  ID="clientEventHandlersVBS"  LANGUAGE="vbscript">  
 
'错误处理  
Sub  CheckError(strMsg)  
if  not  Err.number  =  0  Then  
           MsgBox  strMsg  &  ":"  &  Err.number  &  ";"&Err.description  
           sbNeedToExit  =  True  
           Err.Clear  
End  If  
 
End  Sub  
             
'********************************************************************    
'********************************************************************    
'********************************************************************    
'********************************************************************    
'  枚举拨入电话,并现实在list中  
Sub  window_onload  
On  Error  Resume  Next  
 
'如果Tapi控件没有初试化就退出  
If  sUnableToComplete  =  True  Then  
   Exit  Sub  
End  If      
 
'监听所有地址  
DIM  intTmp  
intTmp  =  Find_Address_And_Register()  
 
If  sbNeedToExit  Then  
 Exit  Sub  
End  If    
 
If  intTmp  =  0    Then  
   MsgBox  "不能找到任何可用ip地址",0,"初试化中"  
   Exit  Sub  
End  If  
     
'  选择第一个ip地址(如果存在多个ip地址)  
selAddress.options(0).selected  =  True  
       
call  changeOptionsState()  
 
window.status  =  "完成"  
 
End  Sub  
 
'********************************************************************    
'********************************************************************    
'********************************************************************    
'********************************************************************    
 
'如果已经启动服务则查找所有地址,计算机必需至少有一个音频设备,并注册所有地址,注册完毕后返回注册地址的数量  
 
Function  Find_Address_And_Register()  
On  Error  Resume  Next  
 DIM  bUsefulAddress  
 DIM  bSupportVideoOrAudio  
 DIM  bSupportVideo  
   
 Find_Address_And_Register  =  0  
 For  Each    pITAddress  in  TAPIOBJ.Addresses  
   
                 bUsefulAddress  =  False  
 
                 if    pITAddress.State  =  AS_INSERVICE  Then  
 
               DIM  pITMediaSupport  
 
               Set  pITMediaSupport  =  MAPPER.QueryDispatchInterface(_  
                     IID_String_ITMediaSupport,pITAddress)  
 
 
               if  not    Err.number  =  0  Then  
                     Err.Clear  
               Else      
                 
             
                   bSupportVideo  =  pITMediaSupport.QueryMediaType(TAPIMEDIAMODE_VIDEO)  
 
                   bSupportVideoOrAudio  =  _  
                             pITMediaSupport.QueryMediaType(TAPIMEDIAMODE_AUDIO)            or    bSupportVideo  
                                                                           
                   call  CheckError("Find_Address_And_Register:ITMediaSupport.QueryMediaType"            )  
 
                     bUsefulAddress  =  bSupportVideoOrAudio            
               End  If  
       End  If  
       
     if  bUsefulAddress  Then                                                    
 
                       iQtaRegistered  =            iQtaRegistered  +  1  
                         
                       if    bSupportVideo  Then                          
                           modes  =  S_MEDIA_AUDIOVIDEO  
                       Else  
                           modes  =  TAPIMEDIAMODE_AUDIO  
                       End  If  
                                 
                       pRegisteredCallNotification(iQtaRegistered)  =  TAPIOBJ.RegisterCallNotifications(pITAddress,True,True,modes,0)  
                       pRegisteredName(iQtaRegistered)  =  pITAddress.AddressName                
                         
                       if  not  Err.number  =  0  Then  'Probably  this  address  does  not  support  incoming  calls  
                                     iQtaRegistered            =  iQtaRegistered  -  1  
                                     Err.Clear  
                       Else  
                                 Find_Address_And_Register  =  Find_Address_And_Register  +  1                
                       End  If                
 
                 
               DIM  oOption  
                   Set            oOption            =  document.createElement("OPTION")    
                       oOption.text              =  pITAddress.AddressName  
                       oOption.value  =  pITAddress.AddressName  
                       selAddress.add(oOption)  
                           
                       Set  oOption  =  Nothing                            
       End  IF  
 Next  
 
call  TAPIOBJ.SetApplicationPriority("IEXPLORE.EXE",TAPIMEDIAMODE_AUDIO,TRUE)  
call  TAPIOBJ.SetApplicationPriority("IEXPLORE.EXE",TAPIMEDIAMODE_VIDEO,TRUE)  
   
End  Function  
 
 
 
Sub  changeOptionsState  
On  Error  Resume  Next  
 
 
Selstr  =  ""  
 
bSupportVideo  =  false  
For  i  =  0  to  selAddress.length  -  1      
     If  selAddress.options(i).selected  =  True  Then    
         selstr  =  selAddress.options(i).value    
         Exit  For  
     End  If          
Next  
 
 
For  Each    pITAddress  in  TAPIOBJ.Addresses  
 
   if      pITAddress.AddressName  =SelStr  Then  
 
     DIM  pITMediaSupport  
       
     Set  pITMediaSupport  =  MAPPER.QueryDispatchInterface(_  
     IID_String_ITMediaSupport,pITAddress)  
 
     call  CheckError("changeOptionsState:Query  ITAddress  for  ITMediaSupport"  )  
   
     bSupportVideo  =  _  
       pITMediaSupport.Query
阅读全文
0 0

相关文章推荐

img
取 消
img