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 ); }
直接把手机关了,然后找个酒吧喝酒去吧
[此贴被 NetDemon(netdemon) 在 09月25日08时20分 编辑过]
|