1。初始化线路并对线路进行监控
代码:
--------------------------------------------------------------------------------
DWORD LineHandleCount=0;HLINE *LineHandles=NULL;HLINEAPP LineApp;VOID CALLBACK LineCallback(DWORD hDevice, DWORD dwMsg, DWORD dwCallbackInstance, DWORD dwParam1, DWORD dwParam2, DWORD dwParam3){}if ( lineInitialize( &LineApp, g_hInst, (LINECALLBACK)LineCallback, g_szAppWndClass, &LineHandleCount ) == 0 ) { LineHandles = new HLINE[LineHandleCount]; for(DWORD i = 0; i < LineHandleCount; i++) { int rc; DWORD ver; LINEEXTENSIONID extensionID; if ( lineNegotiateAPIVersion( LineApp, i, 0x00010000, 0x00020000, &ver, &extensionID ) == 0 ) { rc = lineOpen( LineApp, i, &LineHandles[ i ], ver, 0, (DWORD)0,LINECALLPRIVILEGE_MONITOR|LINECALLPRIVILEGE_OWNER, LINEMEDIAMODE_INTERACTIVEVOICE,NULL); } } }
--------------------------------------------------------------------------------
2。取得来电号码
代码:
--------------------------------------------------------------------------------
VOID CALLBACK LineCallback(DWORD hDevice, DWORD dwMsg, DWORD dwCallbackInstance, DWORD dwParam1, DWORD dwParam2, DWORD dwParam3){switch(dwMsg) { case LINE_CALLINFO: { switch(dwParam1) { case LINECALLINFOSTATE_CALLERID: { LINECALLINFO *lpCallInfo; lpCallInfo = (LINECALLINFO *)malloc(sizeof(LINECALLINFO)+1000); memset(lpCallInfo, 0, sizeof(LINECALLINFO)+1000); lpCallInfo->dwTotalSize = sizeof(LINECALLINFO)+1000; while (1) { lineGetCallInfo( (HCALL)hDevice, lpCallInfo); if (lpCallInfo->dwTotalSize < lpCallInfo->dwNeededSize) lpCallInfo = (LINECALLINFO *)realloc(lpCallInfo,lpCallInfo->dwNeededSize); else break; } TCHAR szPhoneNumber[30]; lstrcpy(szPhoneNumber,(LPTSTR)((LPSTR)((DWORD)lpCallInfo+(DWORD)lpCallInfo->dwCallerIDOffset))); free(lpCallInfo); // szPhoneNumber ---- 这就是呼入的电话号码 } } } break;}}
--------------------------------------------------------------------------------
3。if这个号码你不想接那就
lineDrop((HCALL)hDevice,NULL,0); //挂断电话
或者重新构建回应信息让对方听到关机、不在服务区或者Y正在通话的消息发送给TAPI。
代码:
--------------------------------------------------------------------------------
This 部分的程序 I 还没有 complete
--------------------------------------------------------------------------------
4。如果你觉得老是看着谁来电累了的话,那就
代码:
--------------------------------------------------------------------------------
void ReleaseLine(){ for ( DWORD i=0; i<LineHandleCount; i++ ) lineClose( LineHandles[ i ] ); delete[] LineHandles; lineShutdown( LineApp ); }
--------------------------------------------------------------------------------
代码:
--------------------------------------------------------------------------------
DWORD LineHandleCount=0;HLINE *LineHandles=NULL;HLINEAPP LineApp;VOID CALLBACK LineCallback(DWORD hDevice, DWORD dwMsg, DWORD dwCallbackInstance, DWORD dwParam1, DWORD dwParam2, DWORD dwParam3){}if ( lineInitialize( &LineApp, g_hInst, (LINECALLBACK)LineCallback, g_szAppWndClass, &LineHandleCount ) == 0 ) { LineHandles = new HLINE[LineHandleCount]; for(DWORD i = 0; i < LineHandleCount; i++) { int rc; DWORD ver; LINEEXTENSIONID extensionID; if ( lineNegotiateAPIVersion( LineApp, i, 0x00010000, 0x00020000, &ver, &extensionID ) == 0 ) { rc = lineOpen( LineApp, i, &LineHandles[ i ], ver, 0, (DWORD)0,LINECALLPRIVILEGE_MONITOR|LINECALLPRIVILEGE_OWNER, LINEMEDIAMODE_INTERACTIVEVOICE,NULL); } } }
--------------------------------------------------------------------------------
2。取得来电号码
代码:
--------------------------------------------------------------------------------
VOID CALLBACK LineCallback(DWORD hDevice, DWORD dwMsg, DWORD dwCallbackInstance, DWORD dwParam1, DWORD dwParam2, DWORD dwParam3){switch(dwMsg) { case LINE_CALLINFO: { switch(dwParam1) { case LINECALLINFOSTATE_CALLERID: { LINECALLINFO *lpCallInfo; lpCallInfo = (LINECALLINFO *)malloc(sizeof(LINECALLINFO)+1000); memset(lpCallInfo, 0, sizeof(LINECALLINFO)+1000); lpCallInfo->dwTotalSize = sizeof(LINECALLINFO)+1000; while (1) { lineGetCallInfo( (HCALL)hDevice, lpCallInfo); if (lpCallInfo->dwTotalSize < lpCallInfo->dwNeededSize) lpCallInfo = (LINECALLINFO *)realloc(lpCallInfo,lpCallInfo->dwNeededSize); else break; } TCHAR szPhoneNumber[30]; lstrcpy(szPhoneNumber,(LPTSTR)((LPSTR)((DWORD)lpCallInfo+(DWORD)lpCallInfo->dwCallerIDOffset))); free(lpCallInfo); // szPhoneNumber ---- 这就是呼入的电话号码 } } } break;}}
--------------------------------------------------------------------------------
3。if这个号码你不想接那就
lineDrop((HCALL)hDevice,NULL,0); //挂断电话
或者重新构建回应信息让对方听到关机、不在服务区或者Y正在通话的消息发送给TAPI。
代码:
--------------------------------------------------------------------------------
This 部分的程序 I 还没有 complete
--------------------------------------------------------------------------------
4。如果你觉得老是看着谁来电累了的话,那就
代码:
--------------------------------------------------------------------------------
void ReleaseLine(){ for ( DWORD i=0; i<LineHandleCount; i++ ) lineClose( LineHandles[ i ] ); delete[] LineHandles; lineShutdown( LineApp ); }
--------------------------------------------------------------------------------