?? 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 + -