📄 tapieventprocess.h
字号:
#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 );
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -