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

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

?? extapiasync.cpp

?? Cellcore. ExTAPI,ExTAPIAsync,SMS,TAPI
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this sample source code is subject to the terms of the Microsoft
// license agreement under which you licensed this sample source code. If
// you did not accept the terms of the license agreement, you are not
// authorized to use this sample source code. For the terms of the license,
// please see the license agreement between you and Microsoft or, if applicable,
// see the LICENSE.RTF on your install media or the root of your tools installation.
// THE SAMPLE SOURCE CODE IS PROVIDED "AS IS", WITH NO WARRANTIES OR INDEMNITIES.
//
//

// ExTAPIASync.CPP
//
// Sample that demonstrates some asynchronous functionality of ExTAPI
//
// NOTE: ExTAPI is a privileged API and any application using it must
// be signed using a priviliged certificate.
//

#include <windows.h>
#include <tapi.h>
#include <extapi.h>
#include <tsp.h>
#include <winuserm.h>
#include <aygshell.h>
#include "newres.h"
#include "resource.h"

// some definitons
#define ARRAY_LENGTH(x)			(sizeof(x)/sizeof((x)[0]))
#define TAPI_API_LOW_VERSION	0x00020000
#define TAPI_API_HIGH_VERSION	0x00020000
#define EXT_API_LOW_VERSION		0x00010000
#define EXT_API_HIGH_VERSION	0x00010000
#define REASONABLE_BUFFER		1024
#define EINITFAILED				(-1)

// global variables
HINSTANCE	g_hInstance;
TCHAR		g_szAppName[80];
TCHAR		g_szTitle[80];
HLINEAPP	g_hLineApp;
HLINE		g_hLine;
HWND		g_hwndOpList;
HWND		g_hDlg;

// function declarations
BOOL InitExTAPI();
BOOL GetCurrentOperator(HWND hDlg);
BOOL GetAvailableOperators(HWND hDlg);
DWORD GetTSPLineDeviceID(const HLINEAPP hLineApp, const DWORD dwNumberDevices, 
						 const DWORD dwAPIVersionLow, const DWORD dwAPIVersionHigh, 
						 const TCHAR* const psTSPLineName);
BOOL CALLBACK MainDialogProc(const HWND hDlg, const UINT uiMessage, 
							 const WPARAM wParam, const LPARAM lParam);
void CALLBACK TAPIProc(DWORD hDevice, DWORD dwMessage, DWORD dwInstance,
					   DWORD dwParam1, DWORD dwParam2, DWORD dwParam3);
BOOL InitDialog(const HWND hDlg, UINT nToolBarId);
void RegisterNewOperator();
void CleanupLB();

// ***************************************************************************
// Function Name: WinMain
//
// Purpose: Main entry point into the ExTAPIAsync program
//
// Arguments: Standard WinMain arguments
//
// Return Values: TRUE
//
// Description:
//	Our WinMain function essentialy just pops up a Dialog box that displays
//	the current operator and allows you to register with a new one

int WINAPI WinMain (HINSTANCE hInstance,
                    HINSTANCE hPreviousInstance,
                    LPWSTR pszCommandLine,
                    int nCommandShow)
{
	int		iResult;

	// Load strings
	LoadString(hInstance, IDS_EXTAPIA_APPNAME, g_szAppName, ARRAY_LENGTH(g_szAppName));
	LoadString(hInstance, IDS_EXTAPIA_TITLE, g_szTitle, ARRAY_LENGTH(g_szTitle));

    // Use a globally named mutex to detect another instance of EXTAPIAsync
    const HANDLE hMutex = CreateMutex(0, 0, TEXT("_EXTAPIA_EXE_MUTEX_"));

    // check the result code
	if(0 != hMutex) {
        // First instance running?  Okay to proceed...
		if(ERROR_ALREADY_EXISTS != GetLastError()) {
			g_hInstance = hInstance;
			InitCommonControls();

			// try to initialize ExTAPI
			if (InitExTAPI()) {
				iResult = DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_EXTAPIA_DLGMAIN),
									0, (DLGPROC)MainDialogProc);
				
				if (iResult) {
					MessageBox(NULL, TEXT("An error occurred while getting ExTAPI information"),
							   TEXT("Error!!!"), MB_OK | MB_ICONERROR);
				}
				
				// cleanup
				lineClose(g_hLine);
				lineShutdown(g_hLineApp);
			} else {
				MessageBox(NULL, TEXT("Unable to initialize ExTAPI"),
						   TEXT("Error!!!"), MB_OK | MB_ICONERROR);
			}
		}
        else {
            // Already an instance running - attempt to switch to it and then exit
            const HWND hWndExistingInstance = FindWindow(TEXT("Dialog"), g_szTitle);
			VERIFY((0 == hWndExistingInstance) || SetForegroundWindow(hWndExistingInstance));
        }
        VERIFY(CloseHandle(hMutex));
    }

    return TRUE;
}

// ***************************************************************************
// Function Name: InitExTAPI
// 
// Purpose: Set up ExTAPI
//
// Arguments: none
//
// Return Values:
//	TRUE if successful, FALSE otherwise
//
// Side Effects:
//	Sets g_hLineApp and g_hLine
//	Sets up TapiProc as a TAPI callback function
//	
// Description:
//	This function initializes and opens lines for ExTAPI.  The HLINEAPP and HLINE
//	will be used later to get and set operators.

BOOL InitExTAPI()
{
	DWORD dwNumDevs;
	DWORD dwAPIVersion = TAPI_API_HIGH_VERSION;
	LINEINITIALIZEEXPARAMS liep;
	DWORD dwExtVersion;

	// set the line init params
	liep.dwTotalSize = sizeof(liep);
	liep.dwOptions = LINEINITIALIZEEXOPTION_USEHIDDENWINDOW;
	
	if (lineInitializeEx(&g_hLineApp, g_hInstance, &TAPIProc, TEXT("EXTAPISAMPLE"), 
						 &dwNumDevs, &dwAPIVersion, &liep)) {
		return FALSE;
	}

	// get the device ID
	DWORD dwTAPILineDeviceID = GetTSPLineDeviceID(g_hLineApp, dwNumDevs, 
												  TAPI_API_LOW_VERSION, 
												  TAPI_API_HIGH_VERSION, 
												  CELLTSP_LINENAME_STRING);

	// error getting the line device ID?
	if (0xffffffff == dwTAPILineDeviceID) {
		lineShutdown(g_hLineApp);
		return FALSE;
	}

	// now try and open the line
	const DWORD dwMediaMode = LINEMEDIAMODE_DATAMODEM | LINEMEDIAMODE_INTERACTIVEVOICE;

	if(lineOpen(g_hLineApp, dwTAPILineDeviceID, 
				&g_hLine, dwAPIVersion, 0, 0, 
				LINECALLPRIVILEGE_OWNER, dwMediaMode, 0)) {
		lineShutdown(g_hLineApp);
		return FALSE;
	}

	// set up ExTAPI
	if (lineNegotiateExtVersion(g_hLineApp, dwTAPILineDeviceID, 
								dwAPIVersion, EXT_API_LOW_VERSION, 
								EXT_API_HIGH_VERSION, &dwExtVersion)) {
		lineClose(g_hLine);
		lineShutdown(g_hLineApp);
		return FALSE;
	}

	return TRUE;
}

// ***************************************************************************
// Function Name: GetTSPLineDeviceID
//
// Purpose: To get a TSP Line Device ID
//
// Arguments:
//	hLineApp = the HLINEAPP returned by lineInitializeEx
//	dwNumberDevices = also returned by lineInitializeEx
//	dwAPIVersionLow/High = min version of TAPI that we need
//	psTSPLineName = "Cellular Line"
//
// Return Values: Current Device ID
//
// Description:
//	This function returns the device ID of a named TAPI TSP.  The Device ID is 
//	used in the call to lineOpen

DWORD GetTSPLineDeviceID(const HLINEAPP hLineApp, 
						 const DWORD dwNumberDevices, 
						 const DWORD dwAPIVersionLow, 
						 const DWORD dwAPIVersionHigh, 
						 const TCHAR* const psTSPLineName)
{
	DWORD dwReturn = 0xffffffff;
	for(DWORD dwCurrentDevID = 0 ; dwCurrentDevID < dwNumberDevices ; dwCurrentDevID++)
	{
		DWORD dwAPIVersion;
		LINEEXTENSIONID LineExtensionID;
		if(0 == lineNegotiateAPIVersion(hLineApp, dwCurrentDevID, 
										dwAPIVersionLow, dwAPIVersionHigh, 
										&dwAPIVersion, &LineExtensionID)) {
			LINEDEVCAPS LineDevCaps;
			LineDevCaps.dwTotalSize = sizeof(LineDevCaps);
			if(0 == lineGetDevCaps(hLineApp, dwCurrentDevID, 
								   dwAPIVersion, 0, &LineDevCaps)) {
				BYTE* pLineDevCapsBytes = new BYTE[LineDevCaps.dwNeededSize];
				if(0 != pLineDevCapsBytes) {
					LINEDEVCAPS* pLineDevCaps = (LINEDEVCAPS*)pLineDevCapsBytes;
					pLineDevCaps->dwTotalSize = LineDevCaps.dwNeededSize;
					if(0 == lineGetDevCaps(hLineApp, dwCurrentDevID, 
										   dwAPIVersion, 0, pLineDevCaps)) {
						if(0 == _tcscmp((TCHAR*)((BYTE*)pLineDevCaps+pLineDevCaps->dwLineNameOffset), psTSPLineName)) {
							dwReturn = dwCurrentDevID;
						}
					}
					delete[]  pLineDevCapsBytes;
				}
			}
		}
	}
	return dwReturn;
}

// ***************************************************************************
// Function Name: MainDialogProc
// 
// Purpose: Message Handler for ExTAPIAsync Dialog Box
//
// Arguments: Standard Dialog Procedure Arguments
//
// Return Values:
//	EINITFAILED - One of the components in the dialog box could not be initialized
//	0 - success
//
// Side Effects:
//	Sets g_hDlg and g_hwndOpList
//	
// Description:
//	Dialog Procedure for the main ExTAPIAsync Dialog.  Displays the current
//	operator and a list of available operators.  Allows the user to try and register
//	with a different operator.

BOOL CALLBACK MainDialogProc(const HWND hDlg, const UINT uiMessage, 
							 const WPARAM wParam, const LPARAM lParam)
{
	BOOL	bProcessedMsg = TRUE;

	switch(uiMessage)
	{
		case WM_INITDIALOG:
			if (!InitDialog(hDlg, IDR_EXTAPIA_DLGMENU)) {
				EndDialog(hDlg, EINITFAILED);
				return TRUE;
			}

			// store the hDlg
			g_hDlg = hDlg;
			
			// get current operator
			if (!GetCurrentOperator(hDlg)) {
				EndDialog(hDlg, EINITFAILED);
				return TRUE;
			}

			// get a handle to the listbox
			VERIFY(g_hwndOpList = GetDlgItem(hDlg, IDC_EXTAPIA_AVAILOP));
			
			// get available operators
			if (!GetAvailableOperators(hDlg)) {
				CleanupLB();
				EndDialog(hDlg, EINITFAILED);
				return TRUE;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美极品少妇xxxxⅹ高跟鞋| 在线精品亚洲一区二区不卡| 久久久一区二区| 国产一区二三区| 国产亚洲综合在线| 成人动漫在线一区| 亚洲精品国产第一综合99久久| 色综合天天综合网天天狠天天| 亚洲综合一区二区| 欧美日韩国产精选| 国内外精品视频| 国产精品婷婷午夜在线观看| 色综合天天综合网天天狠天天| 亚洲一区二区三区精品在线| 在线播放/欧美激情| 精品一区二区三区免费视频| 国产欧美日韩三级| 日韩欧美一卡二卡| 国产成人激情av| 一区二区三区精密机械公司| 51精品视频一区二区三区| 国产真实精品久久二三区| 国产精品你懂的| 欧美美女直播网站| 国产不卡一区视频| 亚洲最色的网站| 久久综合av免费| 色域天天综合网| 久久精品国产成人一区二区三区| 欧美国产乱子伦| 欧美精品乱码久久久久久按摩| 国产精品一区在线观看你懂的| 一区二区在线观看不卡| 精品欧美黑人一区二区三区| 99国产欧美另类久久久精品| 麻豆精品在线视频| 亚洲乱码国产乱码精品精的特点| 91精品国产91热久久久做人人| 成人avav在线| 免费高清成人在线| 一区二区在线观看视频| 久久久亚洲精华液精华液精华液| 欧美视频一区二区三区在线观看| 国产美女久久久久| 婷婷中文字幕综合| 中文字幕中文乱码欧美一区二区 | 国产女主播视频一区二区| 欧美日韩在线一区二区| 成人小视频在线| 久久国产精品色| 亚洲第一福利一区| 亚洲免费观看高清完整版在线观看 | 亚洲啪啪综合av一区二区三区| 精品欧美一区二区久久| 欧美日韩视频不卡| 91影院在线免费观看| 国产精品一区二区在线播放| 爽好多水快深点欧美视频| 亚洲特黄一级片| 国产无一区二区| 精品国产一区二区三区忘忧草| 欧美日韩精品一区二区三区蜜桃| 91丨porny丨国产入口| 国产很黄免费观看久久| 麻豆国产精品官网| 日韩中文字幕区一区有砖一区 | 欧美变态口味重另类| 欧美日韩mp4| 欧美视频中文字幕| 色综合久久久久久久久久久| 不卡视频在线观看| 国产成人精品在线看| 久久99热狠狠色一区二区| 日韩 欧美一区二区三区| 亚洲福利视频一区| 亚洲高清久久久| 亚洲二区在线观看| 亚洲va欧美va人人爽| 亚洲综合精品久久| 亚洲一区二区三区四区五区中文 | 欧美中文字幕亚洲一区二区va在线| 成人一区二区视频| 成人av在线资源网| 972aa.com艺术欧美| 91污片在线观看| 色狠狠色噜噜噜综合网| 91久久久免费一区二区| 91精品1区2区| 综合亚洲深深色噜噜狠狠网站| 中文字幕不卡在线| 亚洲人妖av一区二区| 亚洲激情欧美激情| 亚洲一区在线观看网站| 亚洲成人三级小说| 日本欧美一区二区在线观看| 热久久免费视频| 国产一区中文字幕| 成人网页在线观看| 色天使久久综合网天天| 欧美日韩大陆在线| 精品国产免费人成在线观看| 国产亚洲欧美在线| 亚洲精品一二三区| 日精品一区二区| 国产一区二区三区黄视频| 丁香婷婷综合色啪| 欧美中文字幕亚洲一区二区va在线| 欧美日韩黄视频| 久久久久久久综合| 18欧美亚洲精品| 天天影视网天天综合色在线播放| 美女视频网站久久| 成人av在线网站| 欧美日韩国产免费| 久久精品亚洲精品国产欧美| 亚洲黄网站在线观看| 另类欧美日韩国产在线| av一二三不卡影片| 91精品国产综合久久久蜜臀图片| 久久九九久精品国产免费直播| 一色桃子久久精品亚洲| 视频一区视频二区中文| 国产成人免费9x9x人网站视频| 欧美性受xxxx黑人xyx性爽| 欧美mv日韩mv国产网站app| 国产精品毛片无遮挡高清| 丝袜亚洲另类丝袜在线| 成人综合在线观看| 日韩一区二区在线看| 国产精品久久久久婷婷| 免费国产亚洲视频| 91丝袜呻吟高潮美腿白嫩在线观看| 日韩欧美在线影院| 一区二区三区在线视频免费观看| 九九视频精品免费| 日本高清免费不卡视频| 国产午夜精品一区二区| 日韩电影免费在线看| 91麻豆免费观看| 国产网红主播福利一区二区| 日本伊人精品一区二区三区观看方式 | 久久精品国产精品亚洲红杏| 91国产视频在线观看| 亚洲国产高清aⅴ视频| 狠狠色丁香婷婷综合| 欧美久久一二区| 亚洲精品免费在线| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 国产伦精品一区二区三区在线观看| 在线一区二区三区四区五区 | 成年人网站91| 久久久美女艺术照精彩视频福利播放| 天堂影院一区二区| 91久久一区二区| 亚洲男人天堂av网| caoporen国产精品视频| 国产亚洲成年网址在线观看| 麻豆91精品91久久久的内涵| 欧美日韩一区二区三区不卡| 亚洲精品中文字幕乱码三区| kk眼镜猥琐国模调教系列一区二区 | 久久精品免费观看| 日韩一级大片在线观看| 日日夜夜精品视频天天综合网| 欧美日韩中文国产| 亚洲一区二区三区四区在线观看| 99国产一区二区三精品乱码| 中文成人综合网| 波多野结衣91| 最新中文字幕一区二区三区| www.日韩在线| 亚洲三级在线免费| 91影院在线观看| 亚洲男帅同性gay1069| 91碰在线视频| 亚洲欧美区自拍先锋| 色哟哟在线观看一区二区三区| 亚洲色大成网站www久久九九| 一本一道波多野结衣一区二区| 亚洲欧美日韩中文播放| 色悠久久久久综合欧美99| 一区二区三区四区国产精品| 精品视频1区2区| 日韩国产精品久久| 欧美不卡一区二区三区| 国产乱码精品一区二区三区忘忧草| 久久久综合网站| 成人国产精品免费观看动漫| 亚洲美女一区二区三区| 欧美性videosxxxxx| 奇米色777欧美一区二区| 精品欧美一区二区久久| 国产成人99久久亚洲综合精品| 国产精品久久久久久久久搜平片| 日本道色综合久久| 免费在线观看不卡| 国产无一区二区| 在线观看精品一区| 美女精品自拍一二三四| 国产视频一区不卡|