Hallo zusammen,
ich habe schon viel im Internet zu dem Thema gefunden aber das meiste ist uralt. Leider finde ich kein Beispiel was mir irgendwie weiterhilft, wahrscheinlich liegts daran das ich noch Anfänger bin.
Ich möchte einfach nur erkennen ob jemand gerade telefoniert oder ein Rufzeichen ertönt, das ist alles.
Ich habe etwas gefunden was mir zumindest schon mal sagt, das es den richtig TAPI ausgewählt hat aber ab da komme ich nicht weiter. Egal was ich ausprobiere, ich kriege bei nichts einen Rückmeldung oder auch nur eine Reaktion wenn ich anrufe etc.
Code:
ich habe schon viel im Internet zu dem Thema gefunden aber das meiste ist uralt. Leider finde ich kein Beispiel was mir irgendwie weiterhilft, wahrscheinlich liegts daran das ich noch Anfänger bin.
Ich möchte einfach nur erkennen ob jemand gerade telefoniert oder ein Rufzeichen ertönt, das ist alles.
Ich habe etwas gefunden was mir zumindest schon mal sagt, das es den richtig TAPI ausgewählt hat aber ab da komme ich nicht weiter. Egal was ich ausprobiere, ich kriege bei nichts einen Rückmeldung oder auch nur eine Reaktion wenn ich anrufe etc.
Code:
VB.NET-Quellcode
-
- Imports TAPI3Lib
- Public Class Form1
- 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