亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? tapiline.cpp

?? 一個(gè)TAPI源代碼
?? CPP
字號(hào):
// TapiLine.cpp : implementation file
//

#include "stdafx.h"
#include "snd.h"
#include "TapiLine.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

CTapiLine* CTapiLine::MyThis = NULL;
CTapiLine::CTapiLine()
{
	MyThis = this;
	m_LineHandle = NULL;
}

void CTapiLine::Create(HWND& hWnd)
{
	m_hWnd = hWnd;
	m_hInst =(HINSTANCE)::GetWindowLong(m_hWnd, GWL_HINSTANCE);
	SetProp( m_hWnd, "HCALL", NULL );
	SetProp( m_hWnd, "HLINE", NULL );
	SetProp( m_hWnd, "HCOMM", NULL );
}


CTapiLine::~CTapiLine()
{
	RemoveProp( m_hWnd, "HCALL" );
	RemoveProp( m_hWnd, "HLINE" );
	RemoveProp( m_hWnd, "HCOMM" );
}

// ***********************************************
// This routine places the actual call
//
LONG CTapiLine::DialCall( char * strPhNo )
{
int nRet;
int i;
LONG nRetCode =  0;			
DWORD dwApiVer;			
LINEEXTENSIONID	ExtensionID;	

//	nRet  = strlen(strPhNo);
//	if ( nRet <= 0 ) { AfxMessageBox("Phone # cannot NULL"); return -1; }
	if ( m_LineHandle != NULL ) { AfxMessageBox("Already connected"); return -2; }

	nRetCode = ::lineInitialize( &m_LineHandle, m_hInst,(LINECALLBACK)lineCallbackFunc,"MSM TAPI", &m_dwLines );
	if( nRetCode < 0 ) { TRACE("Tapi error..." );	return -3; }
	TRACE("Tapi initialized..." );
	for( i = 0; i < (int)m_dwLines; i++ )
	{
		nRetCode = ::lineNegotiateAPIVersion( m_LineHandle, i,EARLY_TAPI_VERSION, WIN95TAPIVERSION,&dwApiVer,&ExtensionID );
		if ( nRetCode != 0 ) { AfxMessageBox("Fatal Error in lineNegotiateAPIVersion"); return -4; } 
		nRetCode = ::lineOpen( m_LineHandle, i, &m_hLine,
				                dwApiVer, 0, (DWORD)m_hWnd,
                                LINECALLPRIVILEGE_NONE ,
					            LINEMEDIAMODE_DATAMODEM , 
								NULL );
		if( nRetCode == 0 )	{ TRACE("Line # %d Successfully Opend",i);	break;}
		else  { AfxMessageBox("Fatal Error in lineOpen"); return -5; }
	}
	memset( &m_LineParams, 0, sizeof( LINECALLPARAMS ) );
	m_LineParams.dwTotalSize = sizeof( LINECALLPARAMS );
	m_LineParams.dwMinRate = 0;
	m_LineParams.dwMaxRate = 56800;
    m_LineParams.dwBearerMode = LINEBEARERMODE_VOICE; 
	m_LineParams.dwMediaMode  = LINEMEDIAMODE_DATAMODEM |LINEMEDIAMODE_INTERACTIVEVOICE ;

	nRetCode = ::lineMakeCall( m_hLine, &m_hCall,strPhNo,92 ,	NULL );
	//nRetCode = lineDial(  m_hCall,strPhNo,92);
	if( nRetCode < 0 ) { AfxMessageBox("Fatal Error in lineMakeCall"); return -6; }
	else Delay(5000);	
	return( nRetCode );	
}

void CALLBACK CTapiLine::lineCallbackFunc(
    DWORD dwDevice, DWORD dwMessage, DWORD dwCallbackInstance, 
    DWORD dwParam1, DWORD dwParam2, DWORD dwParam3)
{
	MyThis->SetCallbackParams(
							dwDevice, dwMessage, 
							dwCallbackInstance, 
							dwParam1, dwParam2, 
							dwParam3);
}

void CTapiLine::SetCallbackParams(
							DWORD dwDevice, DWORD dwMessage, 
							DWORD dwCallbackInstance, 
							DWORD dwParam1, DWORD dwParam2, 
							DWORD dwParam3)
{
	m_dwDevice = dwDevice;
	m_dwMessage = dwMessage;
	m_dwCallbackInstance = dwCallbackInstance;
	m_dwParam1 = dwParam1;
	m_dwParam2 = dwParam2; 
	m_dwParam3 = dwParam3;
	TapiCallBack();		
}	
void CTapiLine::TapiCallBack()
{
    switch (m_dwMessage) 
        {
        case LINE_LINEDEVSTATE:	
            switch (m_dwParam1)
            {
            	case LINEDEVSTATE_REINIT:
					TRACE("LINEDEVSTATE_REINIT..." );
            		break;
            	case LINEDEVSTATE_RINGING:
					TRACE("LINEDEVSTATE_RINGING..." );
            		break;
				default:
					TRACE("\nUnknown device state ... \n");
            } 
			break; 

        case LINE_CALLSTATE:	// review the call state messages
            HandleCallState();
            break;
       
       case LINE_CLOSE: // the line has been closed!
			TRACE("LINE_CLOSED..." );
			break; 
       case LINE_REPLY:	// pass on TAPI_REPLY messages
			TRACE("Line Reply..." );
			::PostMessage( m_hWnd, WM_TAPI_LINE_REPLY,m_dwParam2,(LPARAM)(HCALL)m_dwDevice );            break;
	    case LINE_REQUEST:
        case LINE_ADDRESSSTATE:
            break;
        case LINE_CALLINFO:
            break;
        case LINE_DEVSPECIFIC:
            break;
        case LINE_DEVSPECIFICFEATURE:
            break;
        case LINE_GATHERDIGITS:
            break;
        case LINE_GENERATE:
            break;
        case LINE_MONITORDIGITS:
            break;
        case LINE_MONITORMEDIA:
            break;
        case LINE_MONITORTONE:
            break;
		default:
			TRACE("\nUnknown Message ... \n");
	}
} 

void CTapiLine::HandleCallState()
{
    if ((HCALL) m_dwDevice != m_hCall) {
		TRACE("LINE_CALLSTATE: Unknown device ID ...");
        return;
    }

	TRACE("\n Call Status = %d",m_dwParam1);
	switch( m_dwParam1 )
	{
		case LINECALLSTATE_RINGBACK:
		{
			TRACE("\n Ring back tone received...");
			break;
		}
        case LINECALLSTATE_IDLE:
			{
			TRACE("Line is idle...");
			::SendMessage(m_hWnd, WM_TAPI_IDLE, 0, 0); 
			HangupCall();
			break;
			}													     
		case LINECALLSTATE_ACCEPTED:	// just pass message on...
			{
			SetVarProps( (HWND)m_dwCallbackInstance, m_dwDevice );
			::PostMessage( m_hWnd, WM_TAPI_CALL_ACCEPTED, 
							0,  (LPARAM)(HCALL)m_dwDevice );
		 	break;
			}
		case LINECALLSTATE_PROCEEDING:	// post progress message
			{
			SetVarProps( (HWND)m_dwCallbackInstance, m_dwDevice );
			::PostMessage( m_hWnd, WM_TAPI_CALL_PROCEEDING, 
							0,  (LPARAM)(HCALL)m_dwDevice );
			break;
			}
		case LINECALLSTATE_CONNECTED:	// hey, we got through!
			{
				LineStateConnected();
				break;
			}
		case LINECALLSTATE_OFFERING:	// pass it on
			{
			TRACE("LINECALLSTATE_OFFERING...");
			break;
			}
		case LINECALLSTATE_DIALTONE:
			{
			TRACE("Dial Tone...");
            break;
			}
        case LINECALLSTATE_DIALING:		// pass it on
			{
			TRACE("Dialing...");
			::SendMessage(m_hWnd, WM_TAPI_DIALING, 0, 0); 
            break;
			}
        case LINECALLSTATE_BUSY:
			{
			TRACE("Line busy, shutting down...");
            HangupCall();
            break;
			}
        case LINECALLSTATE_SPECIALINFO:
			{
			TRACE("Special Info, probably couldn't dial number...");
            HangupCall();
            break;
			}
        case LINECALLSTATE_DISCONNECTED:
        {
            LPSTR pszReasonDisconnected;

            switch (m_dwParam2)
            {
                case LINEDISCONNECTMODE_NORMAL:
                    pszReasonDisconnected = "Remote Party Disconnected";
					::SendMessage(m_hWnd, WM_TAPI_DISCONNECT, 0, 0); 
                    break;
                case LINEDISCONNECTMODE_UNKNOWN:
                    pszReasonDisconnected = "Disconnected: Unknown reason";
                    break;

                case LINEDISCONNECTMODE_REJECT:
                    pszReasonDisconnected = "Remote Party rejected call";
                    break;

                case LINEDISCONNECTMODE_PICKUP:
                    pszReasonDisconnected = 
                        "Disconnected: Local phone picked up";
                    break;

                case LINEDISCONNECTMODE_FORWARDED:
                    pszReasonDisconnected = "Disconnected: Forwarded";
                    break;

                case LINEDISCONNECTMODE_BUSY:
                    pszReasonDisconnected = "Disconnected: Busy";
                    break;

                case LINEDISCONNECTMODE_NOANSWER:
                    pszReasonDisconnected = "Disconnected: No Answer";
                    break;

                case LINEDISCONNECTMODE_BADADDRESS:
                    pszReasonDisconnected = "Disconnected: Bad Address";
                    break;

                case LINEDISCONNECTMODE_UNREACHABLE:
                    pszReasonDisconnected = "Disconnected: Unreachable";
                    break;

                case LINEDISCONNECTMODE_CONGESTION:
                    pszReasonDisconnected = "Disconnected: Congestion";
                    break;

                case LINEDISCONNECTMODE_INCOMPATIBLE:
                    pszReasonDisconnected = "Disconnected: Incompatible";
                    break;

                case LINEDISCONNECTMODE_UNAVAIL:
                    pszReasonDisconnected = "Disconnected: Unavail";
                    break;

                case LINEDISCONNECTMODE_NODIALTONE:
                    pszReasonDisconnected = "Disconnected: No Dial Tone";
                    break;

                default:
                    pszReasonDisconnected = 
                        "Disconnected: LINECALLSTATE; Bad Reason";
                    break;

            }
			TRACE(pszReasonDisconnected);
            HangupCall();
            break;
        }
		default:
			TRACE("\nUnknown call state in param1\n");
	}		
}

LONG CTapiLine::LineStateConnected()
{
	TRACE("Hey I am connected!");
	
	LPVARSTRING lpVarStringStruct = NULL;
	size_t sizeofVarStringStruct = sizeof( VARSTRING ) + 1024;

	long lreturn;
	// get the comm handle.  Be sure to drop this handle when
	// the call is done or you'll get device unavailable errors
	// and have to REBOOT!
	lpVarStringStruct = ( LPVARSTRING )LocalAlloc( 0, sizeofVarStringStruct );
	do
	{
		memset( lpVarStringStruct, 0, sizeofVarStringStruct );
		lpVarStringStruct->dwTotalSize = (DWORD)sizeofVarStringStruct;
		lreturn = lineGetID( 0, 0, (HCALL)m_dwDevice, LINECALLSELECT_CALL, lpVarStringStruct, "comm/datamodem" );
	} while( lreturn != 0 );
	//
	// get comm device handle and save it to properties area
	m_hComm = *( (LPHANDLE )( ( LPBYTE )lpVarStringStruct + lpVarStringStruct->dwStringOffset ) );
	SetProp( (HWND)m_dwCallbackInstance, "HCOMM", m_hComm );
	SetVarProps( (HWND)m_dwCallbackInstance, m_dwDevice );
	//
	// tell main dialog we got through
	::SendMessage(m_hWnd, WM_TAPI_CONNECT, 
					  TAPI_LINECALLSTATE_CONNECTED, 
					  (LPARAM)(HANDLE)m_hComm );
	LocalFree( lpVarStringStruct ); // drop mem space

	return lreturn;
}

LONG CTapiLine::HangupCall()
{         
LONG nRetCode = 0;
LINECALLINFO LineCallInfo;

	if ( m_hComm == NULL ) { AfxMessageBox("Not Connected"); return -1; }
	CloseHandle( m_hComm );
	m_hComm = NULL;
	if ( m_hCall == NULL ) { AfxMessageBox("Not Connected"); return -1; }
	nRetCode = lineDrop( m_hCall, NULL, 0 );
	TRACE("Call Dropped...");
	memset( &LineCallInfo, 0, sizeof( LINECALLINFO ) );
	LineCallInfo.dwTotalSize = sizeof( LINECALLINFO );
	lineGetCallInfo( (HCALL)m_dwDevice, &LineCallInfo );
	nRetCode = lineDeallocateCall( (HCALL)m_dwDevice );
	if ( m_hLine == NULL ) { AfxMessageBox("Line Already Clear"); return -1; }
	nRetCode = lineClose( m_hLine );
	TRACE("Call stopped...");
	m_LineHandle = NULL;

    return nRetCode;
}
void CTapiLine::SetVarProps(HWND hWnd, DWORD hDevice )
{
LINECALLINFO LineCallInfo;

	memset( &LineCallInfo, 0, sizeof( LINECALLINFO ) );
	SetProp( hWnd, "HCALL", (HANDLE)(HCALL)hDevice );
	LineCallInfo.dwTotalSize = sizeof( LINECALLINFO );
	lineGetCallInfo( (HCALL)hDevice, &LineCallInfo );
 	SetProp(m_hWnd, "HLINE", (HANDLE)(HLINE)LineCallInfo.hLine );
	return;
}
void CTapiLine::Delay(UINT lFactor)
{
MSG msg;
DWORD dwTimeStarted;
dwTimeStarted = GetTickCount();

    while(GetTickCount() - dwTimeStarted < lFactor)
	{ 
		if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
        {
			TranslateMessage(&msg);
			DispatchMessage(&msg);
		}
	}
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产综合久久精品图片| 国产精品久久免费看| 亚洲视频免费在线观看| 国产精品系列在线观看| 欧美一区二区三区色| 亚洲国产成人av好男人在线观看| 色视频成人在线观看免| 亚洲欧洲三级电影| 日本道免费精品一区二区三区| 一区在线播放视频| 91在线观看成人| 亚洲色图欧洲色图婷婷| 国产一区二三区| 2021中文字幕一区亚洲| 极品销魂美女一区二区三区| 久久免费美女视频| 久久精品国产99久久6| 欧美男生操女生| 日本女人一区二区三区| 宅男在线国产精品| 精品在线视频一区| 国产视频一区二区在线观看| 国产精品一区二区男女羞羞无遮挡| 久久综合视频网| 美女在线一区二区| 久久久九九九九| 91亚洲国产成人精品一区二区三| 亚洲免费在线观看| 欧美日韩三级视频| 久久不见久久见免费视频1 | 91在线观看污| 久久久久久久久伊人| 福利电影一区二区三区| 亚洲免费资源在线播放| 欧美日韩国产综合一区二区| 毛片不卡一区二区| 国产精品久久久久影视| 成人avav在线| 亚洲电影在线播放| 久久久久久综合| 91色九色蝌蚪| 日本亚洲欧美天堂免费| 欧美国产精品一区二区| 在线观看亚洲精品| 国精产品一区一区三区mba视频| 久久综合久色欧美综合狠狠| 97久久精品人人做人人爽| 午夜欧美视频在线观看| 久久亚洲二区三区| 欧美性猛交xxxx黑人交| 国产在线国偷精品免费看| 欧美国产日产图区| 4hu四虎永久在线影院成人| 国产成人精品1024| 偷拍亚洲欧洲综合| 中文字幕av一区二区三区免费看 | 国产99久久精品| 亚洲国产日韩一区二区| 国产欧美一区二区在线| 欧美精品丝袜中出| 国内精品第一页| 亚洲妇女屁股眼交7| 国产精品理伦片| 日韩视频永久免费| 91国偷自产一区二区开放时间 | 欧美不卡123| 91国内精品野花午夜精品| 国产精品1区二区.| 亚洲成年人网站在线观看| 日韩欧美一二三区| 欧美日韩亚洲综合在线| 99久久久国产精品免费蜜臀| 极品少妇一区二区三区精品视频 | 日韩手机在线导航| 在线观看网站黄不卡| 岛国一区二区三区| 国产精一品亚洲二区在线视频| 国产午夜亚洲精品不卡| 精品日产卡一卡二卡麻豆| 欧美丝袜丝交足nylons| 91丨九色丨尤物| voyeur盗摄精品| 老色鬼精品视频在线观看播放| 亚洲最大的成人av| 国产精品久久久久四虎| 国产香蕉久久精品综合网| 日韩欧美电影一二三| 在线视频欧美精品| 色综合久久综合网97色综合| 春色校园综合激情亚洲| 麻豆一区二区三| 男女激情视频一区| 日本女人一区二区三区| 五月婷婷激情综合网| 亚洲精品一二三区| 一区二区三区日韩欧美| 亚洲人成7777| 夜夜嗨av一区二区三区四季av | 91亚洲精华国产精华精华液| 欧美aaaaaa午夜精品| 免费一级片91| 男女激情视频一区| 看电视剧不卡顿的网站| 美脚の诱脚舐め脚责91| 美女视频黄 久久| 久久国产三级精品| 日韩精品电影在线观看| 美女视频一区二区| 国产精品88av| av在线这里只有精品| 91老师国产黑色丝袜在线| 成人涩涩免费视频| 成人av影院在线| 欧美日韩高清不卡| 欧美变态tickling挠脚心| 日本一区二区久久| 香蕉加勒比综合久久| 国产一区二区免费看| 91精品福利在线| 2019国产精品| 亚洲精品精品亚洲| 国产在线播放一区| 欧美三级欧美一级| 国产精品国产三级国产aⅴ中文 | 国产亚洲午夜高清国产拍精品| 亚洲美女视频一区| 精品一区二区三区在线观看国产 | 欧美激情一区二区三区四区| 亚洲午夜视频在线| 国产91精品免费| 欧美一级久久久| 一区二区三区欧美久久| 国产乱理伦片在线观看夜一区| 日本乱码高清不卡字幕| 日本一区二区三区在线不卡 | 九一九一国产精品| 欧美午夜寂寞影院| 国产精品麻豆99久久久久久| 免费一级欧美片在线观看| 色妞www精品视频| 国产亚洲一本大道中文在线| 奇米综合一区二区三区精品视频| 色av成人天堂桃色av| 国产精品免费视频观看| 国产精品一区一区三区| 欧美一区二区免费视频| 亚洲国产日韩一级| 在线精品视频免费观看| ...中文天堂在线一区| 国产精品 欧美精品| 日韩欧美卡一卡二| 奇米精品一区二区三区在线观看 | 日韩在线一二三区| 91久久人澡人人添人人爽欧美| 国产欧美精品一区| 国产精品一区二区三区网站| 精品精品欲导航| 日韩va亚洲va欧美va久久| 欧美日韩高清一区二区三区| 亚洲国产精品久久久久婷婷884| 成人永久aaa| 国产精品久久久久久久久搜平片 | 91精品国产综合久久久蜜臀图片 | 欧美揉bbbbb揉bbbbb| 亚洲精选在线视频| 91麻豆国产香蕉久久精品| 亚洲女女做受ⅹxx高潮| 91天堂素人约啪| 亚洲亚洲人成综合网络| 欧美日韩精品一区二区三区| 亚洲高清免费在线| 51精品国自产在线| 久久激情综合网| 国产亚洲综合性久久久影院| 国产大陆a不卡| 中文字幕一区二区三区蜜月| 91女人视频在线观看| 亚洲国产一区二区在线播放| 欧美日韩国产123区| 久久国内精品自在自线400部| 久久久久久亚洲综合| 99综合电影在线视频| 亚洲综合男人的天堂| 日韩午夜三级在线| 国产精品夜夜嗨| 亚洲免费资源在线播放| 欧美日韩免费观看一区三区| 老色鬼精品视频在线观看播放| 久久久久国产精品麻豆| 91视频一区二区三区| 日韩成人一区二区三区在线观看| 精品国产髙清在线看国产毛片| 国产精品影视在线| 亚洲精品乱码久久久久久日本蜜臀| 欧美日韩精品免费观看视频| 国产乱理伦片在线观看夜一区| 亚洲欧美另类久久久精品2019 | 久久这里只有精品6| 成人av在线影院| 午夜久久久久久|