TAPIEventProcess.h
上传用户:fast168168
上传日期:2010-01-05
资源大小:337k
文件大小:5k
- #pragma once
- //defined by user
- #define WM_PRIVATETAPIEVENT WM_USER + 101
- // CTAPIEventNotification 是 ITTAPIEventNotification接口的实现类
- class CTAPIEventNotification : public ITTAPIEventNotification
- {
- private:
- LONG m_dwRefCount;
- public:
- HWND m_hWnd;
- // Event实现函数
- HRESULT STDMETHODCALLTYPE Event(
- TAPI_EVENT TapiEvent,
- IDispatch * pEvent
- );
-
- // 其它COM接口
- public:
- //
- // 构造函数
- //
- CTAPIEventNotification()
- {
- m_dwRefCount = 1;
- }
- //
- // 析构函数
- //
- ~CTAPIEventNotification()
- {
- }
- // IUnknown 实现函数
- HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, void **ppvObject)
- {
- if (iid == IID_ITTAPIEventNotification)
- {
- AddRef();
- *ppvObject = (void *)this;
- return S_OK;
- }
- if (iid == IID_IUnknown)
- {
- AddRef();
- *ppvObject = (void *)this;
- return S_OK;
- }
- return E_NOINTERFACE;
- }
- //
- // 计数器
- //
- ULONG STDMETHODCALLTYPE AddRef()
- {
- ULONG l = InterlockedIncrement(&m_dwRefCount);
- return l;
- }
-
- ULONG STDMETHODCALLTYPE Release()
- {
- ULONG l = InterlockedDecrement(&m_dwRefCount);
- if ( 0 == l)
- {
- delete this;
- }
-
- return l;
- }
- };
- ///////////////////////////////////////////////////////////////////////////////
- // class CTapi
- //
- // 功能:对 TAPI 功能进行定制,方便本程序使用
- ///////////////////////////////////////////////////////////////////////////////
- class CTapi
- {
- public:
- //////////////////////////////////////////////////////////
- // 成员变量
- //////////////////////////////////////////////////////////
- ITTAPI * m_pTapi; // TAPI object
- ITAddress* m_pAddress; // Address object
- ITBasicCallControl * m_pCall; // Call object
- BOOL m_AutoAnswer; // 是否自动应答标志
- ITTerminal *m_pPlayFileTerm; // 播放文件终端
- ITTerminal *m_pRecordFileTerm; // 录音文件终端
- ULONG m_Advise; // 用于取消注册事件
- HWND m_hWnd; // UI 线程句柄
- int m_dwMessages; // 收到消息数
- int m_Version; // 当前操作系统的版本 0:win2000以下,1:win2000,2:winXP
- CString m_WelcomeFileName; // 当前要播放的音频文件名
- CString m_RecFileName; // 录音文件主文件名(将来在后面加上序号)
- CString m_RecFileExt; // 录音文件扩展名
- //////////////////////////////////////////////////////////
- // 成员函数
- //////////////////////////////////////////////////////////
- CTapi();
- ~CTapi();
- // 初始化 TAPI
- HRESULT InitializeTapi();
- // 关闭 TAPI
- void ShutdownTapi();
- // 在所有地址中寻找 Modem 的地址,并对其监听
- HRESULT ListenOnAddresses();
- //在给定地址上监听
- HRESULT ListenOnThisAddress(
- ITAddress * pAddress
- );
- // 验证当前 Address 是否支持给定的媒体类型
- BOOL AddressSupportsMediaType(
- ITAddress * pAddress,
- long lMediaType
- );
- // 注册事件
- HRESULT RegisterTapiEventInterface(CTAPIEventNotification *pTAPIEventNotification);
- // 对给定地址呼叫
- HRESULT MakeTheCall(
- IN DWORD dwAddressType,
- IN PWCHAR szAddressToCall
- );
- // 对给定的 Address 选择终端,仅用于呼叫
- HRESULT SelectTerminalsOnCall(
- ITAddress * pAddress,
- ITBasicCallControl * pCall
- );
- // 获得默认终端
- HRESULT GetTerminal(
- ITAddress * pAddress,
- ITStream * pStream,
- ITTerminal ** ppTerminal
- );
- // 为放音准备声音文件
- HRESULT PreparePlay(CString strFileName);
-
- // 把待播放的音频文件加入播放列表
- HRESULT PutPlayList(
- IN ITTerminal *pITTerminal,
- IN BSTR bstrFileName);
- //应答电话
- HRESULT AnswerTheCall();
- //挂断电话
- HRESULT DisconnectTheCall();
- //释放本次通话所占资源
- void ReleaseTheCall();
- // 录音
- HRESULT StartRecord();
- // 创建并选择录音文件终端
- HRESULT CreateAndSelectFileRecordTerminal();
- // 检测输入媒体流 pITStream 是否具有给定方向
- HRESULT CheckStreamDir(
- IN ITStream* pITStream,
- IN TERMINAL_DIRECTION td);
- // 检测输入媒体流 pITStream 是否具有给定媒体类型
- HRESULT CheckStreamMT(
- IN ITStream* pITStream,
- IN long mt);
- // 判断输入 call 是否与 m_pCall 是同一个 call
- bool SameCall(ITCallStateEvent* pCallStateEvent);
- // 为 MediaEvent 事件创建终端
- HRESULT GetTerminalFromStreamEvent(
- IN ITCallMediaEvent * pCallMediaEvent,
- OUT ITTerminal ** ppTerminal );
- };