.NET ソフトウェア フレームワークに基づく Microsoft テクノロジ。 特定のカテゴリに適合しないその他のトピック。
TAPI3.xのITCallInfo2で着信番号を取得したい
T Anzo
0
評価のポイント
.NET Framework 4.8でTAPI3.xを使用して着信番号を取得するアプリを作成しています。
ITCallStateEventのCallからget_CallInfoStringで着信番号を取得しようとしているのですが、
・ITCallStateEvent.Callは型はITCallInfoだがITCallInfo2として取得される。
・ITCallInfo2はITCallInfoの拡張版のはずだが、ITCallInfoにあるはずのget_CallInfoStringが公開メンバーとして存在しない(非公開になっている?)
・ITCallInfo2をITCallInfoに型変換しても、ITCallInfo2のまま
となってしまい、着信番号を取得できません。
ITCallInfo2のままget_CallInfoStringを呼び出す、あるいはITCallInfoに型変換をしてget_CallInfoStringを呼び出すことは出来ないのでしょうか。
なお、.NET Framework 4.8を使用している理由は、.NET8でTAPIを使うのが非常に困難とのことだったためで、.NET8で容易にTAPIを使えるのであればそちらの方がありがたいです。
(最終的に、.NET8のアプリに名前付きパイプでメッセージ送信する想定です。)
Microsoft TAPI 3.0 Type Libraryのファイルバージョンは10.0.19041.4522です。
Imports TAPI3Lib
Module Module1
Dim tapi As ITTAPI
Const TAPI_MEDIA_TYPE_AUDIO As Integer = 8
Sub Main()
Console.WriteLine("TAPI 初期化中...")
tapi = New TAPIClass()
tapi.Initialize()
' TAPIイベントを全て受け取るようにフィルタを設定
tapi.EventFilter = CInt(TAPI_EVENT.TE_CALLNOTIFICATION Or
TAPI_EVENT.TE_CALLSTATE Or
TAPI_EVENT.TE_CALLINFOCHANGE Or
TAPI_EVENT.TE_GENERATEEVENT Or
TAPI_EVENT.TE_PRIVATE Or
TAPI_EVENT.TE_REQUEST)
AddHandler CType(tapi, TAPIClass).Event, AddressOf TapiEventHandler
' 着信通知を登録
For Each address As ITAddress In tapi.Addresses
Try
' オーディオメディアタイプをサポートしているか
If (address.MediaTypes And TAPI_MEDIA_TYPE_AUDIO) <> 0 Then
Dim dwRegister As Integer = 0
Dim hr As Integer = tapi.RegisterCallNotifications(
address,
True, ' monitor
True, ' owner
TAPI_MEDIA_TYPE_AUDIO,
0
)
Console.WriteLine("通知登録成功: " & address.AddressName & " HRESULT: 0x" & hr.ToString("X"))
End If
Catch ex As Exception
Console.WriteLine("例外: " & address.AddressName & " → " & ex.Message)
End Try
Next
Console.WriteLine("着信待機中(Enterで終了)...")
Console.ReadLine()
tapi.Shutdown()
End Sub
Sub TapiEventHandler(ByVal TapiEvent As TAPI_EVENT, ByVal pEvent As Object)
If TapiEvent = TAPI_EVENT.TE_CALLSTATE Then
Dim callStateEvent As ITCallStateEvent = CType(pEvent, ITCallStateEvent)
If TypeOf callStateEvent.Call Is ITCallInfo Then
Dim callInfo As ITCallInfo
callInfo = DirectCast(callStateEvent.Call, ITCallInfo)
Try
Dim callerId As String = callInfo.get_CallInfoString(CALLINFO_STRING.CIS_CALLERIDNUMBER)
Console.WriteLine("着信: " & callerId)
Catch ex As Exception
Console.WriteLine("発信者番号の取得に失敗: " & ex.Message)
End Try
Else
Console.WriteLine("callStateEvent.Call は ITCallInfo ではありません")
End If
End If
End Sub
End Module
開発者テクノロジ | .NET | その他
開発者テクノロジ | .NET | その他
サインインして回答する