次の方法で共有

TAPI3.xのITCallInfo2で着信番号を取得したい

T Anzo 0 評価のポイント
2025-07-17T09:15:56.1333333+00:00

.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 | その他

.NET ソフトウェア フレームワークに基づく Microsoft テクノロジ。 特定のカテゴリに適合しないその他のトピック。


お客様の回答

質問作成者は回答に "承認済み"、モデレーターは "おすすめ" とマークできます。これにより、ユーザーは作成者の問題が回答によって解決したことを把握できます。