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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? simpletapi.c

?? msj上的tapi例子
?? C
字號:
//
//  MODULE: SimpleTAPI.c
//
//  PURPOSE: Demonstrates basic TAPI programming model
//

#include <stdio.h>
#include <windows.h>
#include <winbase.h>

#define TAPI_CURRENT_VERSION 0x00020000
#include <tapi.h>

#include "TapiInfo.h"

HLINEAPP	g_hLineApp;

// Buffers used for pretty printing stuff...
CHAR	strAddress[512];
CHAR	strText[512], strText2[512];

// Various flags...
BOOL	g_bIncoming;		// Waits for Incoming Calls
BOOL	g_bTranslate;		// Perform Address Translation
BOOL	g_bTranslateDialog;	// Display Translation Dialog
BOOL	g_bForce;			// Force specified device
BOOL	g_bQuit;			// Session terminating.
DWORD	g_dwMediaMode;		// MediaMode for calls.
BOOL	g_bTerminate;		// Flag to tell message thread to terminate
DWORD	g_dwDevId;			// TAPI device used.

// Handles and Messages
HANDLE g_hTAPIEvent;	// Created by TAPI
HANDLE g_hEvReply;		// Used for Asynch Reply
HLINE g_hLine;			// Line handle
HCALL g_hCall;			// Call handle

DWORD g_dwTAPIMsg;		// TAPI Message
DWORD g_dwNumDevs;		// Total number of TAPI devices
DWORD g_dwTAPIVer;		// TAPI Version

HANDLE	hEventThread;	// TAPI Event monitoring thread.


// Stuff defined somewhere else
extern DWORD WINAPI CallProc(LPVOID lpThreadParam);
extern DWORD WINAPI zTapiEventThread (LPVOID lpThreadParam);
extern BOOL ParseCommandLine(int ac, char * av[]);

// Stuff defined here...
BOOL WINAPI zControlHandlerRoutine (DWORD dwCtrlType);
DWORD SelectLine(HLINEAPP hLineApp, DWORD dwTAPIVersion, DWORD dwNumDevs,	DWORD dwMediaMode);
void EndSession();

int main (int argc, char * argv[])
{
LINEINITIALIZEEXPARAMS lineInitializeExParams;
LONG lRes;
LINETRANSLATEOUTPUT *lpTranslateOutput;

	g_dwTAPIVer = 0x00020000;

	g_bIncoming = FALSE;
	g_hCall = NULL;
	g_bQuit = FALSE;

	ParseCommandLine(argc, argv);

	SetConsoleCtrlHandler(zControlHandlerRoutine, TRUE);

	g_hEvReply = CreateEvent(NULL, FALSE, FALSE, NULL);

	// Clear the structure before using...
	memset(&lineInitializeExParams, 0, sizeof(LINEINITIALIZEEXPARAMS));
	// Populate the options...
	lineInitializeExParams.dwTotalSize = sizeof(LINEINITIALIZEEXPARAMS);
	lineInitializeExParams.dwOptions = LINEINITIALIZEEXOPTION_USEEVENT;
	// Initialize TAPI.
	lRes = lineInitializeEx(&g_hLineApp, NULL, NULL, 
		"CallTest", &g_dwNumDevs, &g_dwTAPIVer, &lineInitializeExParams);
	if(lRes != 0)  //Oops!
	{
		FormatLineError(lRes, strText);
		printf("TAPI Error: %s on lineInitializeEx.\r\n", strText);
		CloseHandle(g_hEvReply);
		return -1;
	}

	// Got the event handle...
	g_hTAPIEvent = lineInitializeExParams.Handles.hEvent;
	// Start event monitoring...
	hEventThread = CreateThread(NULL, 0, zTapiEventThread, NULL, 0, 0);
	if(hEventThread == NULL)  // Bummer...
	{
		printf("Win32 Error %d on CreateThread (event thread).\r\n", GetLastError());
		g_bTerminate = TRUE;
		WaitForSingleObject(hEventThread,  INFINITE);
		CloseHandle(hEventThread);
		CloseHandle(g_hEvReply);
		lineShutdown(g_hLineApp);
		return -1;
	}
	if(! g_bForce) // Select the device that supports specified media modes.
		g_dwDevId = SelectLine(g_hLineApp, g_dwTAPIVer, g_dwNumDevs, g_dwMediaMode);
	if(g_dwDevId == 0xffffffff) 
	{
		printf("No suitable line found.\r\n");
		g_bTerminate = TRUE;
		WaitForSingleObject(hEventThread,  INFINITE);
		CloseHandle(hEventThread);
		CloseHandle(g_hEvReply);
		lineShutdown(g_hLineApp);
		ExitProcess(0);
	}

	// Open the line...
	lRes = lineOpen(g_hLineApp, g_dwDevId, &g_hLine, 0x00020000, 0x00000000, 1, 
			LINECALLPRIVILEGE_OWNER, g_dwMediaMode, NULL);
	if(lRes != 0)
	{	//  Doh!
		FormatLineError(lRes, strText);
		printf("TAPI Error: %s on lineOpen.\r\n", strText);
		g_bTerminate = TRUE;
		WaitForSingleObject(hEventThread,  INFINITE);
		CloseHandle(hEventThread);
		CloseHandle(g_hEvReply);
		return -1;
	}

	// We want to be notified for everything
	lRes = lineSetStatusMessages(g_hLine, 0x1ffffff, 0);
	if(lRes != 0)
	{	
		FormatLineError(lRes, strText);
		printf("TAPI Error: %s on lineOpen.\r\n", strText);
	}

	if(g_bIncoming)
	{
		printf("Waiting for incoming call.\r\n");
		while (1)
		{
			// Now we wait for notification...
			WaitForSingleObject(g_hEvReply, INFINITE);
			if(g_dwTAPIMsg == LINECALLSTATE_OFFERING)
			{
				printf("Answering.\r\n");
				lRes = lineAnswer(g_hCall, NULL, 0);
				if(lRes != 0)
				{	//  Doh!
					FormatLineError(lRes, strText);
					printf("TAPI Error: %s on lineMakeCall.\r\n", strText);
					EndSession();
				}
				break;
			}
		}
	}
	else
	{
		if(g_bTranslateDialog) 
		{
			lRes = lineTranslateDialog(g_hLineApp, g_dwDevId, g_dwTAPIVer, NULL, strAddress);
			if(lRes != 0)
			{	
				FormatLineError(lRes, strText);
				printf("TAPI Error: %s on lineTranslateDialog.\r\n", strText);
			}
		}

		
		if(g_bTranslate)
		{
			printf("Performing translation\r\nSource: %s\r\n", strAddress);
			lpTranslateOutput = (LINETRANSLATEOUTPUT *)malloc(sizeof(LINETRANSLATEOUTPUT)+1000);
			lpTranslateOutput->dwTotalSize = sizeof(LINETRANSLATEOUTPUT)+1000;
			while (1)
			{
				lRes = lineTranslateAddress(g_hLineApp, g_dwDevId, g_dwTAPIVer, strAddress, 0, 0, lpTranslateOutput);
				if(lRes != 0)
					{	
					FormatLineError(lRes, strText);
					printf("TAPI Error: %s on lineTranslateAddress.\r\n", strText);
					}
				if(lpTranslateOutput->dwTotalSize < lpTranslateOutput->dwNeededSize)
					lpTranslateOutput = (LINETRANSLATEOUTPUT *)realloc(lpTranslateOutput, lpTranslateOutput->dwNeededSize);
				else break;
			} 
			strcpy(strAddress, (LPSTR)((DWORD)lpTranslateOutput+(DWORD)lpTranslateOutput->dwDialableStringOffset));
			printf("Results: %s\r\n",(LPSTR)((DWORD)lpTranslateOutput+(DWORD)lpTranslateOutput->dwDisplayableStringOffset)); 
		}
		printf("Calling %s\r\n", strAddress);
		lRes = lineMakeCall(g_hLine, &g_hCall, strAddress, 0, NULL);
		if(lRes != 0)
		{	//  Doh!
			FormatLineError(lRes, strText);
			printf("TAPI Error: %s on lineMakeCall.\r\n", strText);
		}
	}


	// All done.  Wait for the event thread to finish.
	WaitForSingleObject(hEventThread, INFINITE);
	CloseHandle(hEventThread);
	if(!g_bQuit)
	{
		EndSession();
	}

}


BOOL WINAPI zControlHandlerRoutine (DWORD dwCtrlType) 
{ 

  // Got an control handler event
  switch (dwCtrlType) 
  { 
    case CTRL_C_EVENT:        // Handle any event that will cause
    case CTRL_BREAK_EVENT:    // a termination of our program
    case CTRL_CLOSE_EVENT:
    case CTRL_LOGOFF_EVENT:
    case CTRL_SHUTDOWN_EVENT:
    {
		g_bQuit = TRUE;
		EndSession();
		break;
    }

    default:
      break;
  } 

  return(FALSE);

} // End of zControlHandlerRoutine

// SelectLine function returns the ID of last line device that supports requested MediaMode
// If not found, It will return 0xFFFFFFFF
DWORD SelectLine(
			HLINEAPP hLineApp,	// Valid LineApp Handle 
			DWORD dwTAPIVersion,	// TAPI Version to be used.
			DWORD dwNumDevs,	// Number of line devices
			DWORD dwMediaMode) // MediaMode to look for.
{
DWORD dwResult = 0xFFFFFFFF;
DWORD dwAPIVersion;
LINEEXTENSIONID ExtentionId;
LINEDEVCAPS *lpDevCaps;
DWORD	i;
LONG lRes;
BOOL bDone;

	for(i = 0 ; i < dwNumDevs ; i++)
		{

		lRes = lineNegotiateAPIVersion(hLineApp, i, dwTAPIVersion, dwTAPIVersion, 
										&dwAPIVersion, &ExtentionId);
		if(lRes != 0)  //Oops!
			{
			FormatLineError(lRes, strText);
			printf("TAPI Error: %s on lineNegotiateAPIVersion.\r\n", strText);
			}
		else
			{
			lpDevCaps = (LINEDEVCAPS *)malloc(sizeof(LINEDEVCAPS)+1000);	// Allocate a little extra memory...
			if(lpDevCaps == NULL) return dwResult;	// No luck allocating memory...

			memset(lpDevCaps, 0, sizeof(LINEDEVCAPS)+1000);
			lpDevCaps->dwTotalSize = sizeof(LINEDEVCAPS)+1000;
			bDone = FALSE;
			do // Go around and keep trying until there's enough memory
				{
				lRes = lineGetDevCaps(hLineApp, i, dwAPIVersion, 0, lpDevCaps);
				if(lRes != 0)  //Oops!
					{
					FormatLineError(lRes, strText);
					printf("TAPI Error: %s on lineGetDevCaps.\r\n", strText);
					free(lpDevCaps);
					break;
					}
				if(lpDevCaps->dwNeededSize > lpDevCaps->dwTotalSize)
					// Reallocate for dwNeededSize
					lpDevCaps = (LINEDEVCAPS *)realloc(lpDevCaps, lpDevCaps->dwNeededSize);
				else bDone = TRUE;
				}
			while (!bDone);

			printf("Line %d is %s.\r\n", i, (LPBYTE)((DWORD)lpDevCaps+(DWORD)lpDevCaps->dwLineNameOffset));
			if(lpDevCaps->dwMediaModes & dwMediaMode)
				{
				dwResult = i;
				printf("Line device %d selected.\r\n", i);
				}
			else printf("Line device %d rejected.\r\n", i);
			free(lpDevCaps);
			}
	}
	return dwResult;
}

void EndSession()
{
LINECALLSTATUS CallStatus;
LONG	lRes;
	if(g_hCall != NULL)  // Call might be in progress...
	{
		memset(&CallStatus, 0, sizeof(LINECALLSTATUS));

		lRes = lineGetCallStatus(g_hCall, &CallStatus); 
			// Technically, lineGetCallStatus returns more info than 
			// there is in the structure.  Since we don't care about it,
			// We just go on our merry way...
		if(lRes == 0) // If it didn't fail, there's at least a call that needs
			// to be droped.
		{
			printf("Call is still in progress.  Droping it.\r\n");
			lineDrop(g_hCall, NULL, 0);
		}
	}

	printf("Closing line. (Ctrl Handler)\r\n");
	lRes = lineClose(g_hLine);
	if(lRes != 0)
	{
		FormatLineError(lRes, strText);
		printf("TAPI Error: %s on lineClose.\r\n", strText);
	}

	g_bTerminate = TRUE;  // Tell the event thread that it's time to go...
	WaitForSingleObject(hEventThread, INFINITE); // Wait for it to comit suicide..
	CloseHandle(hEventThread);
	printf("Shutting down TAPI.\r\n");
	lRes = lineShutdown(g_hLineApp);
	if(lRes != 0)
	{
		FormatLineError(lRes, strText);
		printf("TAPI Error: %s on lineShutdown.\r\n", strText);
	}
	ExitProcess(0);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美午夜视频网站| 2020日本不卡一区二区视频| 精品久久久久一区| 亚洲乱码国产乱码精品精小说 | 欧美一二三四在线| 国产精品理论片在线观看| 免费在线成人网| 99久久精品国产观看| 久久视频一区二区| 日韩av电影免费观看高清完整版 | 精品欧美乱码久久久久久1区2区| 亚洲桃色在线一区| 懂色av一区二区在线播放| 91精品视频网| 亚洲一区二区三区四区在线免费观看 | 日本高清不卡aⅴ免费网站| 久久只精品国产| 麻豆国产一区二区| 欧美日韩一卡二卡三卡 | 亚洲福利视频导航| 99久久er热在这里只有精品66| 日韩欧美的一区| 奇米777欧美一区二区| 精品视频一区 二区 三区| 亚洲免费在线视频一区 二区| 国产传媒久久文化传媒| 2014亚洲片线观看视频免费| 美女在线一区二区| 欧美区在线观看| 亚洲成人av中文| 欧美人妖巨大在线| 日韩国产在线观看一区| 欧美丝袜丝交足nylons| 一区二区三区欧美久久| 91精品福利视频| 午夜av一区二区三区| 日本国产一区二区| 亚洲成人精品一区| 欧美日本精品一区二区三区| 亚洲综合色丁香婷婷六月图片| 一本久久综合亚洲鲁鲁五月天| 亚洲免费观看高清在线观看| 成人激情校园春色| 国产精品免费视频一区| 高清成人在线观看| 亚洲精品国产一区二区精华液| 91影视在线播放| 亚洲综合一二区| 91超碰这里只有精品国产| 日韩福利视频导航| 久久久国际精品| 成人福利视频在线| 亚洲成人综合视频| 日韩一区二区三区视频| 国产自产2019最新不卡| 国产精品日日摸夜夜摸av| 91香蕉视频mp4| 亚洲成av人片在线| 久久老女人爱爱| 93久久精品日日躁夜夜躁欧美| 亚洲国产综合91精品麻豆| 666欧美在线视频| 国产高清无密码一区二区三区| 国产精品福利一区| 精品视频资源站| 国产成人啪午夜精品网站男同| 亚洲欧美成aⅴ人在线观看| 欧美高清dvd| 国产精品系列在线观看| 亚洲成人久久影院| 国产农村妇女毛片精品久久麻豆 | 久久综合色天天久久综合图片| av午夜一区麻豆| 美女视频网站久久| 一区精品在线播放| 欧美一区二区三区日韩| 成人理论电影网| 青青草国产精品亚洲专区无| 国产精品网站在线观看| 欧美日韩黄视频| 成人黄色在线看| 麻豆精品久久久| 亚洲国产日韩在线一区模特| 国产午夜亚洲精品午夜鲁丝片| 欧美日韩一区在线观看| 成人在线一区二区三区| 天堂午夜影视日韩欧美一区二区| 国产精品久久久久久亚洲毛片| 欧美一级一区二区| 欧美视频一区二区三区四区 | 国产成人午夜精品5599| 日韩高清不卡一区| 亚洲一线二线三线视频| 亚洲国产精品黑人久久久| 日韩欧美一区二区视频| 欧美日韩成人综合在线一区二区| 91视频xxxx| 成人丝袜高跟foot| 国产在线播放一区二区三区| 青青草原综合久久大伊人精品优势| 国产精品国产三级国产普通话蜜臀 | 午夜久久久影院| 亚洲午夜一二三区视频| 亚洲欧美激情视频在线观看一区二区三区| 精品理论电影在线观看 | 国产精品乱码人人做人人爱| 欧美电影精品一区二区| 4438x亚洲最大成人网| 欧美在线短视频| 色综合久久久网| 日本道色综合久久| 一本到三区不卡视频| 97精品国产露脸对白| 99re热这里只有精品视频| 国产大陆亚洲精品国产| 国产电影一区二区三区| 成人免费视频国产在线观看| 国产精品一二三四| 成人动漫精品一区二区| 成人av电影在线网| 99精品在线免费| 欧美性三三影院| 91精品国产色综合久久久蜜香臀| 欧美精品自拍偷拍| 欧美一区二区三区播放老司机| 欧美一级欧美一级在线播放| 日韩午夜激情电影| 久久久久久久综合狠狠综合| 久久免费视频色| 国产精品素人视频| 综合亚洲深深色噜噜狠狠网站| 亚洲久本草在线中文字幕| 夜夜嗨av一区二区三区中文字幕| 亚洲成人精品一区二区| 免费三级欧美电影| 国产成人免费在线| 91婷婷韩国欧美一区二区| 在线观看91视频| 日韩欧美一二区| 国产精品色呦呦| 亚洲国产成人91porn| 久久99国产精品麻豆| 成人国产精品免费观看动漫| 在线精品视频免费播放| 欧美一区二区三区在线观看 | 日韩三级电影网址| 国产亚洲成av人在线观看导航| 亚洲人成亚洲人成在线观看图片| 亚洲狠狠爱一区二区三区| 久久成人精品无人区| 97se亚洲国产综合在线| 欧美电影影音先锋| 国产三级精品视频| 天天影视色香欲综合网老头| 国产成人综合在线| 欧美日韩在线播放一区| 国产欧美精品一区二区色综合 | 成人综合在线网站| 91精品麻豆日日躁夜夜躁| 国产调教视频一区| 午夜精品免费在线| 北岛玲一区二区三区四区| 91精品国产综合久久小美女| 国产精品天美传媒| 久久99精品久久久| 欧美午夜一区二区三区| 国产精品人妖ts系列视频| 日本在线播放一区二区三区| 99热这里都是精品| 欧美mv日韩mv国产网站| 亚洲午夜精品网| 99久久国产综合色|国产精品| 精品国产一二三区| 午夜精品福利一区二区蜜股av| 成人黄色片在线观看| 精品福利一二区| 三级影片在线观看欧美日韩一区二区 | 国产在线精品国自产拍免费| 欧美天堂一区二区三区| 中文字幕亚洲成人| 成人性生交大片免费看视频在线 | 亚洲午夜免费电影| 91麻豆国产在线观看| 国产日韩欧美综合一区| 久久99热99| 日韩欧美成人激情| 热久久一区二区| 欧美精三区欧美精三区| 亚洲一区二区三区四区五区中文 | av在线不卡电影| 亚洲国产精品国自产拍av| 国产精品一二三区| 精品99久久久久久| 日韩专区在线视频| 欧洲亚洲精品在线| 亚洲精选在线视频| 欧美视频在线观看一区| 亚洲综合色区另类av| 欧美日韩久久久久久| 亚洲电影一级黄|