VBTAPI.vb
上传用户:z100004
上传日期:2020-03-27
资源大小:1084k
文件大小:7k
源码类别:

TAPI编程

开发平台:

Visual Basic

  1. Imports TAPI3Lib
  2. Namespace VBCity.TAPI
  3.     Public Class VBTAPI
  4.         Private Const MediaAudio As Integer = 8
  5.         Private Const MediaModem As Integer = 16
  6.         Private Const MediaFax As Integer = 32
  7.         Private Const MediaVideo As Integer = 32768
  8.         Private WithEvents oTAPI As TAPI3Lib.TAPI ' will hold our TAPI object
  9.         Private oAddress As ITAddress ' will hold our selected address (you can hold many address in an array)
  10.         Private RegCookie As Integer
  11.         Sub New()
  12.             Try
  13.                 ' creating a new instance to first initialize TAPI befor attaching the events
  14.                 Dim m_TAPI As New TAPIClass
  15.                 ' a variable to hold supported media types for the address
  16.                 Dim MediaTypes As Integer
  17.                 ' initializing TAPI
  18.                 m_TAPI.Initialize()
  19.                 ' attaching event sink
  20.                 oTAPI = m_TAPI
  21.                 ' getting red of the private instance as we have another global instance (oTAPI)
  22.                 m_TAPI = Nothing
  23.                 Dim AddressCollection As ITCollection = oTAPI.Addresses()
  24.                 For Each Address As ITAddress In AddressCollection ' looping through address collection
  25.                     If Address.State = ADDRESS_STATE.AS_INSERVICE Then ' checking if address is working 
  26.                         Dim MediaSupport As ITMediaSupport = Address ' extracting meida support interface from the address
  27.                         MediaTypes = MediaSupport.MediaTypes ' extracting media types supporting
  28.                         MediaSupport = Nothing ' dispose of the object
  29.                         If MediaTypes And MediaModem = MediaModem Then
  30.                             ' the address is a data Modem
  31.                             If MediaTypes And MediaAudio = MediaAudio Then
  32.                                 'the address supports Audio
  33.                                 oAddress = Address ' select this address
  34.                                 MsgBox("we have selected this address: " + oAddress.AddressName) ' show the selected address name
  35.                                 Exit For
  36.                             End If
  37.                         End If
  38.                     End If
  39.                 Next Address
  40.                 If Not oAddress Is Nothing Then
  41.                     ' registering notifications for the selected address
  42.                     RegCookie = oTAPI.RegisterCallNotifications(oAddress, True, False, MediaTypes, 1)
  43.                     ' Note: this registration can be done on as many adresses as you want
  44.                     ' we will not receive notifications unless we spacify which type of events we are interested in
  45.                     oTAPI.EventFilter = (TAPI_EVENT.TE_CALLNOTIFICATION Or TAPI_EVENT.TE_CALLSTATE Or TAPI_EVENT.TE_CALLINFOCHANGE)
  46.                 Else
  47.                     MsgBox("no address selected")
  48.                 End If
  49.             Catch ex As Exception
  50.                 MsgBox("Error occured:" & vbCrLf & ex.Message, MsgBoxStyle.Critical, "VBCITY.VBTAPI")
  51.             End Try
  52.             ' by now we are done for the initialization and registration and the events should fire 
  53.             ' Note: you must dispose of tapi befor you destroy the class and i will leave this for now
  54.         End Sub
  55.         Private Sub oTAPI_Event(ByVal TapiEvent As TAPI3Lib.TAPI_EVENT, ByVal pEvent As Object) Handles oTAPI.Event
  56.             ' making a thread to asynchronosly process the event
  57.             Dim thAsyncCall As System.Threading.Thread
  58.             Select Case TapiEvent
  59.                 Case TAPI_EVENT.TE_CALLNOTIFICATION 'Call Notification Arrived
  60.                     ' assigning our sub's delegate to the thread
  61.                     thAsyncCall = New Threading.Thread(AddressOf CallNotificationEvent)
  62.                     'passing the variable for the thread
  63.                     CallNotificationObject = CType(pEvent, ITCallNotificationEvent)
  64.                     ' starting the thread
  65.                     thAsyncCall.Start()
  66.                 Case TAPI_EVENT.TE_CALLSTATE 'Call State Changes
  67.                     ' assigning our sub's delegate to the thread
  68.                     thAsyncCall = New Threading.Thread(AddressOf CallStateEvent)
  69.                     'passing the variable for the thread
  70.                     CallStateObject = CType(pEvent, ITCallStateEvent)
  71.                     ' starting the thread
  72.                     thAsyncCall.Start()
  73.                 Case TAPI_EVENT.TE_CALLINFOCHANGE 'Call Info Changes
  74.                     ' assigning our sub's delegate to the thread
  75.                     thAsyncCall = New Threading.Thread(AddressOf CallInfoEvent)
  76.                     'passing the variable for the thread
  77.                     CallInfoObject = CType(pEvent, ITCallInfoChangeEvent)
  78.                     ' starting the thread
  79.                     thAsyncCall.Start()
  80.             End Select
  81.         End Sub
  82.         Private CallNotificationObject As ITCallNotificationEvent
  83.         Private Sub CallNotificationEvent()
  84.             ' here we should check to see various notifications of new and ended calls
  85.             Select Case CallNotificationObject.Event
  86.                 Case CALL_NOTIFICATION_EVENT.CNE_MONITOR
  87.                     ' the notification is for a monitored call
  88.                 Case CALL_NOTIFICATION_EVENT.CNE_OWNER
  89.                     ' the notification is for an owned call
  90.             End Select
  91.         End Sub
  92.         Private CallStateObject As ITCallStateEvent
  93.         Private Sub CallStateEvent()
  94.             ' here we should check to see call state and handle connects and disconnects
  95.             Select Case CallStateObject.State
  96.                 Case CALL_STATE.CS_IDLE
  97.                 Case CALL_STATE.CS_INPROGRESS
  98.                 Case CALL_STATE.CS_OFFERING
  99.                     ' a call  is offering so if you dont want it then pass it 
  100.                     ' the code to pass the call is the following
  101.                     'Dim CallControl As ITBasicCallControl = CallStateObject.Call
  102.                     'CallControl.HandoffIndirect (CallStateObject.Call.CallInfoLong(CALLINFO_LONG.CIL_MEDIATYPESAVAILABLE)
  103.                 Case CALL_STATE.CS_CONNECTED
  104.                     ' call  is connected 
  105.                 Case CALL_STATE.CS_QUEUED
  106.                     ' call is beeing queued
  107.                 Case CALL_STATE.CS_HOLD
  108.                     ' call is on hold 
  109.                 Case CALL_STATE.CS_DISCONNECTED
  110.                     ' call is disconnected
  111.             End Select
  112.         End Sub
  113.         Private CallInfoObject As ITCallInfoChangeEvent
  114.         Private Sub CallInfoEvent()
  115.             ' here you can extract information from the call 
  116.             'the code to extract the caller ID
  117.             Dim CallerID As String
  118.             CallerID = CallInfoObject.Call.CallInfoString(CALLINFO_STRING.CIS_CALLERIDNAME)
  119.         End Sub
  120.     End Class
  121. End Namespace