VBTAPI.vb
上传用户:z100004
上传日期:2020-03-27
资源大小:1084k
文件大小:7k
- Imports TAPI3Lib
- Namespace VBCity.TAPI
- Public Class VBTAPI
- Private Const MediaAudio As Integer = 8
- Private Const MediaModem As Integer = 16
- Private Const MediaFax As Integer = 32
- Private Const MediaVideo As Integer = 32768
- Private WithEvents oTAPI As TAPI3Lib.TAPI ' will hold our TAPI object
- Private oAddress As ITAddress ' will hold our selected address (you can hold many address in an array)
- Private RegCookie As Integer
- Sub New()
- Try
- ' creating a new instance to first initialize TAPI befor attaching the events
- Dim m_TAPI As New TAPIClass
- ' a variable to hold supported media types for the address
- Dim MediaTypes As Integer
- ' initializing TAPI
- m_TAPI.Initialize()
- ' attaching event sink
- oTAPI = m_TAPI
- ' getting red of the private instance as we have another global instance (oTAPI)
- m_TAPI = Nothing
- Dim AddressCollection As ITCollection = oTAPI.Addresses()
- For Each Address As ITAddress In AddressCollection ' looping through address collection
- If Address.State = ADDRESS_STATE.AS_INSERVICE Then ' checking if address is working
- Dim MediaSupport As ITMediaSupport = Address ' extracting meida support interface from the address
- MediaTypes = MediaSupport.MediaTypes ' extracting media types supporting
- MediaSupport = Nothing ' dispose of the object
- If MediaTypes And MediaModem = MediaModem Then
- ' the address is a data Modem
- If MediaTypes And MediaAudio = MediaAudio Then
- 'the address supports Audio
- oAddress = Address ' select this address
- MsgBox("we have selected this address: " + oAddress.AddressName) ' show the selected address name
- Exit For
- End If
- End If
- End If
- Next Address
- If Not oAddress Is Nothing Then
- ' registering notifications for the selected address
- RegCookie = oTAPI.RegisterCallNotifications(oAddress, True, False, MediaTypes, 1)
- ' Note: this registration can be done on as many adresses as you want
- ' we will not receive notifications unless we spacify which type of events we are interested in
- oTAPI.EventFilter = (TAPI_EVENT.TE_CALLNOTIFICATION Or TAPI_EVENT.TE_CALLSTATE Or TAPI_EVENT.TE_CALLINFOCHANGE)
- Else
- MsgBox("no address selected")
- End If
- Catch ex As Exception
- MsgBox("Error occured:" & vbCrLf & ex.Message, MsgBoxStyle.Critical, "VBCITY.VBTAPI")
- End Try
- ' by now we are done for the initialization and registration and the events should fire
- ' Note: you must dispose of tapi befor you destroy the class and i will leave this for now
- End Sub
- Private Sub oTAPI_Event(ByVal TapiEvent As TAPI3Lib.TAPI_EVENT, ByVal pEvent As Object) Handles oTAPI.Event
- ' making a thread to asynchronosly process the event
- Dim thAsyncCall As System.Threading.Thread
- Select Case TapiEvent
- Case TAPI_EVENT.TE_CALLNOTIFICATION 'Call Notification Arrived
- ' assigning our sub's delegate to the thread
- thAsyncCall = New Threading.Thread(AddressOf CallNotificationEvent)
- 'passing the variable for the thread
- CallNotificationObject = CType(pEvent, ITCallNotificationEvent)
- ' starting the thread
- thAsyncCall.Start()
- Case TAPI_EVENT.TE_CALLSTATE 'Call State Changes
- ' assigning our sub's delegate to the thread
- thAsyncCall = New Threading.Thread(AddressOf CallStateEvent)
- 'passing the variable for the thread
- CallStateObject = CType(pEvent, ITCallStateEvent)
- ' starting the thread
- thAsyncCall.Start()
- Case TAPI_EVENT.TE_CALLINFOCHANGE 'Call Info Changes
- ' assigning our sub's delegate to the thread
- thAsyncCall = New Threading.Thread(AddressOf CallInfoEvent)
- 'passing the variable for the thread
- CallInfoObject = CType(pEvent, ITCallInfoChangeEvent)
- ' starting the thread
- thAsyncCall.Start()
- End Select
- End Sub
- Private CallNotificationObject As ITCallNotificationEvent
- Private Sub CallNotificationEvent()
- ' here we should check to see various notifications of new and ended calls
- Select Case CallNotificationObject.Event
- Case CALL_NOTIFICATION_EVENT.CNE_MONITOR
- ' the notification is for a monitored call
- Case CALL_NOTIFICATION_EVENT.CNE_OWNER
- ' the notification is for an owned call
- End Select
- End Sub
- Private CallStateObject As ITCallStateEvent
- Private Sub CallStateEvent()
- ' here we should check to see call state and handle connects and disconnects
- Select Case CallStateObject.State
- Case CALL_STATE.CS_IDLE
- Case CALL_STATE.CS_INPROGRESS
- Case CALL_STATE.CS_OFFERING
- ' a call is offering so if you dont want it then pass it
- ' the code to pass the call is the following
- 'Dim CallControl As ITBasicCallControl = CallStateObject.Call
- 'CallControl.HandoffIndirect (CallStateObject.Call.CallInfoLong(CALLINFO_LONG.CIL_MEDIATYPESAVAILABLE)
- Case CALL_STATE.CS_CONNECTED
- ' call is connected
- Case CALL_STATE.CS_QUEUED
- ' call is beeing queued
- Case CALL_STATE.CS_HOLD
- ' call is on hold
- Case CALL_STATE.CS_DISCONNECTED
- ' call is disconnected
- End Select
- End Sub
- Private CallInfoObject As ITCallInfoChangeEvent
- Private Sub CallInfoEvent()
- ' here you can extract information from the call
- 'the code to extract the caller ID
- Dim CallerID As String
- CallerID = CallInfoObject.Call.CallInfoString(CALLINFO_STRING.CIS_CALLERIDNAME)
- End Sub
- End Class
- End Namespace