TAPIEventProcess.h
上传用户:fast168168
上传日期:2010-01-05
资源大小:337k
文件大小:5k
源码类别:

TAPI编程

开发平台:

Visual C++

  1. #pragma once
  2. //defined by user
  3. #define WM_PRIVATETAPIEVENT WM_USER + 101
  4. // CTAPIEventNotification 是 ITTAPIEventNotification接口的实现类
  5. class CTAPIEventNotification : public ITTAPIEventNotification
  6. {
  7. private:
  8.     LONG       m_dwRefCount;
  9. public:
  10. HWND m_hWnd;
  11.     // Event实现函数
  12.     HRESULT STDMETHODCALLTYPE Event(
  13.                                     TAPI_EVENT TapiEvent,
  14.                                     IDispatch * pEvent
  15.                                    );
  16.    
  17. // 其它COM接口
  18. public:
  19.     //
  20.     // 构造函数
  21.     //
  22.     CTAPIEventNotification()
  23.     {
  24.         m_dwRefCount = 1;
  25.     }
  26.     //
  27.     // 析构函数
  28.     //
  29.     ~CTAPIEventNotification()
  30.     {
  31.     }
  32.     // IUnknown 实现函数
  33. HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, void **ppvObject)
  34.     {
  35.         if (iid == IID_ITTAPIEventNotification)
  36.         {
  37.             AddRef();
  38.             *ppvObject = (void *)this;
  39.             return S_OK;
  40.         }
  41.         if (iid == IID_IUnknown)
  42.         {
  43.             AddRef();
  44.             *ppvObject = (void *)this;
  45.             return S_OK;
  46.         }
  47.         return E_NOINTERFACE;
  48.     }
  49.     //
  50.     // 计数器
  51.     //
  52.     ULONG STDMETHODCALLTYPE AddRef()
  53.     {
  54.         ULONG l = InterlockedIncrement(&m_dwRefCount);
  55.         return l;
  56.     }
  57.     
  58. ULONG STDMETHODCALLTYPE Release()
  59.     {
  60.         ULONG l = InterlockedDecrement(&m_dwRefCount);
  61.         if ( 0 == l)
  62.         {
  63.             delete this;
  64.         }
  65.         
  66.         return l;
  67.     }
  68. };
  69. ///////////////////////////////////////////////////////////////////////////////
  70. // class CTapi
  71. // 
  72. // 功能:对 TAPI 功能进行定制,方便本程序使用
  73. ///////////////////////////////////////////////////////////////////////////////
  74. class CTapi
  75. {
  76. public:
  77. //////////////////////////////////////////////////////////
  78. // 成员变量
  79. //////////////////////////////////////////////////////////
  80. ITTAPI *                m_pTapi; // TAPI object
  81. ITAddress* m_pAddress; // Address object
  82. ITBasicCallControl *    m_pCall; // Call object
  83. BOOL                    m_AutoAnswer; // 是否自动应答标志
  84. ITTerminal              *m_pPlayFileTerm; // 播放文件终端
  85. ITTerminal *m_pRecordFileTerm; // 录音文件终端
  86. ULONG                   m_Advise; // 用于取消注册事件
  87. HWND m_hWnd; // UI 线程句柄
  88. int m_dwMessages; // 收到消息数
  89. int m_Version; // 当前操作系统的版本 0:win2000以下,1:win2000,2:winXP
  90. CString m_WelcomeFileName; // 当前要播放的音频文件名
  91. CString m_RecFileName; // 录音文件主文件名(将来在后面加上序号)
  92. CString m_RecFileExt; // 录音文件扩展名
  93. //////////////////////////////////////////////////////////
  94. // 成员函数
  95. //////////////////////////////////////////////////////////
  96. CTapi();
  97. ~CTapi();
  98. // 初始化 TAPI
  99. HRESULT InitializeTapi();
  100. // 关闭 TAPI
  101. void ShutdownTapi();
  102. // 在所有地址中寻找 Modem 的地址,并对其监听
  103. HRESULT ListenOnAddresses();
  104. //在给定地址上监听
  105. HRESULT ListenOnThisAddress(
  106. ITAddress * pAddress
  107. );
  108. // 验证当前 Address 是否支持给定的媒体类型
  109. BOOL AddressSupportsMediaType(
  110. ITAddress * pAddress,
  111. long        lMediaType
  112. );
  113. // 注册事件
  114. HRESULT RegisterTapiEventInterface(CTAPIEventNotification *pTAPIEventNotification);
  115. // 对给定地址呼叫
  116. HRESULT MakeTheCall(
  117. IN DWORD dwAddressType,
  118. IN PWCHAR szAddressToCall
  119. );
  120. // 对给定的 Address 选择终端,仅用于呼叫
  121. HRESULT SelectTerminalsOnCall(
  122. ITAddress * pAddress,
  123. ITBasicCallControl * pCall
  124. );
  125. // 获得默认终端
  126. HRESULT GetTerminal(
  127. ITAddress   * pAddress,
  128. ITStream    * pStream,
  129. ITTerminal ** ppTerminal
  130. );
  131. // 为放音准备声音文件
  132. HRESULT PreparePlay(CString strFileName);
  133. // 把待播放的音频文件加入播放列表
  134. HRESULT PutPlayList(
  135. IN ITTerminal *pITTerminal, 
  136. IN BSTR bstrFileName);
  137. //应答电话
  138. HRESULT AnswerTheCall();
  139. //挂断电话
  140. HRESULT DisconnectTheCall();
  141. //释放本次通话所占资源
  142. void ReleaseTheCall();
  143. // 录音
  144. HRESULT StartRecord();
  145. // 创建并选择录音文件终端
  146. HRESULT CreateAndSelectFileRecordTerminal();
  147. // 检测输入媒体流 pITStream 是否具有给定方向
  148. HRESULT CheckStreamDir(
  149. IN ITStream* pITStream,
  150. IN TERMINAL_DIRECTION td);
  151. // 检测输入媒体流 pITStream 是否具有给定媒体类型
  152. HRESULT CheckStreamMT(
  153. IN ITStream* pITStream,
  154. IN long mt);
  155. // 判断输入 call 是否与 m_pCall 是同一个 call
  156. bool SameCall(ITCallStateEvent* pCallStateEvent);
  157. // 为 MediaEvent 事件创建终端
  158. HRESULT GetTerminalFromStreamEvent( 
  159. IN ITCallMediaEvent * pCallMediaEvent,
  160. OUT ITTerminal ** ppTerminal );
  161. };