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

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

?? extapi.cpp

?? Cellcore. ExTAPI,ExTAPIAsync,SMS,TAPI
?? CPP
字號:
//
// 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.
//
/*
   ExTAPI.CPP
  
   Sample that demonstrates some 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 <aygshell.h>
#include <tsp.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 HUGE_BUFFER             4096

// global variables
HINSTANCE   g_hInstance;
// Friendly application name passed to ExTAPI.
// This is loaded from a STRINGTABLE in the program resources
// to help enable internationalisation.
TCHAR gszFriendlyAppName[160]; 

// function declarations
BOOL GetExTAPIInfo();
DWORD GetTSPLineDeviceID(const HLINEAPP hLineApp, const DWORD dwNumberDevices, 
                         const DWORD dwAPIVersionLow, const DWORD dwAPIVersionHigh, 
                         const TCHAR* const psTSPLineName);

// ***************************************************************************
// Function Name: WinMain
//
// Purpose: Main entry point into the ExTAPI program
//
// Arguments: Standard WinMain arguments
//
// Return Values: TRUE
//
// Description:
//  This WinMain simply calls GetExTAPIInfo, which pops up a MessageBox

int WINAPI WinMain (HINSTANCE hInstance,
                    HINSTANCE hPreviousInstance,
                    LPWSTR pszCommandLine,
                    int nCommandShow)
{
    // store the hInstance
    g_hInstance = hInstance;
    
    // Get the friendly application name from the STRINGTABLE
    LoadString(g_hInstance, IDS_FRIENDLYNAME, 
               gszFriendlyAppName, ARRAY_LENGTH(gszFriendlyAppName)); 

    // pop up a message box with general info
    if (!GetExTAPIInfo()) 
    {
        TCHAR szCGI[160]; 
        LoadString(g_hInstance, IDS_CANTGETINFO, szCGI, ARRAY_LENGTH(szCGI)); 
        MessageBox(NULL, szCGI, gszFriendlyAppName, MB_OK | MB_ICONERROR);
    }

    return TRUE;
}

// ***************************************************************************
// Function Name: GetExTAPIInfo
//
// Purpose: To get and display general ExTAPI information.
//
// Arguments: None
//
// Return Values: 
//  TRUE if all ExTAPI operations completed successfully, FALSE otherwise
//
// Description:
//  This function initializes ExTAPI and then calls lineGetGeneralInfo.
//  It then takes the info that lGGI returned and displays it in a MessageBox

BOOL GetExTAPIInfo()
{
    DWORD dwNumDevs;
    DWORD dwAPIVersion = TAPI_API_HIGH_VERSION;
    LINEINITIALIZEEXPARAMS liep;
    HLINEAPP hLineApp = 0;
    HLINE hLine = 0;
    DWORD dwExtVersion;
    TCHAR szMBString[HUGE_BUFFER];
    BOOL bRetVal = FALSE;
    LPBYTE pLineGeneralInfoBytes = NULL;
    DWORD dwTAPILineDeviceID;
    const DWORD dwMediaMode = LINEMEDIAMODE_DATAMODEM | LINEMEDIAMODE_INTERACTIVEVOICE;
    LINEGENERALINFO lviGeneralInfo;
    LPLINEGENERALINFO plviGeneralInfo;
    LPTSTR tsManufacturer, tsModel, tsRevision, tsSerialNumber, tsSubscriberNumber;
    TCHAR szUnavailable[160]; 

    // Load text from STRINGTABLE
    LoadString(g_hInstance, IDS_UNAVAILABLE, szUnavailable, ARRAY_LENGTH(szUnavailable)); 

    // set the line init params
    liep.dwTotalSize = sizeof(liep);
    liep.dwOptions = LINEINITIALIZEEXOPTION_USEEVENT;
    
    if (lineInitializeEx(&hLineApp, 0, 0, gszFriendlyAppName, 
                         &dwNumDevs, &dwAPIVersion, &liep)) 
    {
        goto cleanup;
    }

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

    // error getting the line device ID?
    if (0xffffffff == dwTAPILineDeviceID) 
    {
        goto cleanup;
    }

    // now try and open the line
    if(lineOpen(hLineApp, dwTAPILineDeviceID, 
                &hLine, dwAPIVersion, 0, 0, 
                LINECALLPRIVILEGE_OWNER, dwMediaMode, 0)) 
    {
        goto cleanup;
    }

    // set up ExTAPI
    if (lineNegotiateExtVersion(hLineApp, dwTAPILineDeviceID, 
                                dwAPIVersion, EXT_API_LOW_VERSION, 
                                EXT_API_HIGH_VERSION, &dwExtVersion)) 
    {
        goto cleanup;
    }

    // try to get the general info
    lviGeneralInfo.dwTotalSize = sizeof(lviGeneralInfo);

    // step 1: find out how much space we need
    if (lineGetGeneralInfo(hLine, &lviGeneralInfo)) 
    {
        goto cleanup;
    }

    // step 2: malloc space for all the info we need
    pLineGeneralInfoBytes = new BYTE[lviGeneralInfo.dwNeededSize];
    plviGeneralInfo = (LPLINEGENERALINFO)pLineGeneralInfoBytes;

    // step 3: call lGGI again with the appropriately sized buffer
    if(NULL != pLineGeneralInfoBytes) 
    {
        plviGeneralInfo->dwTotalSize = lviGeneralInfo.dwNeededSize;
        if (lineGetGeneralInfo(hLine, plviGeneralInfo)) 
        {
            goto cleanup;
        }
    } else 
    {
        goto cleanup;
    }

    // step 4: cast all the arguments to strings
    if(0 < plviGeneralInfo->dwManufacturerSize)
    { 
        tsManufacturer = (WCHAR*)(((BYTE*)plviGeneralInfo)+plviGeneralInfo->dwManufacturerOffset);
    }
    else
    {
        tsManufacturer = szUnavailable;
    }

    if(0 < plviGeneralInfo->dwModelSize)
    { 
        tsModel = (WCHAR*)(((BYTE*)plviGeneralInfo)+plviGeneralInfo->dwModelOffset);
    }
    else
    {
        tsModel = szUnavailable;
    }

    if(0 < plviGeneralInfo->dwRevisionSize)
    {
        tsRevision = (WCHAR*)(((BYTE*)plviGeneralInfo)+plviGeneralInfo->dwRevisionOffset);
    }
    else
    {
        tsRevision = szUnavailable;
    }

    if(0 < plviGeneralInfo->dwSerialNumberSize)
    {
        tsSerialNumber = (WCHAR*)(((BYTE*)plviGeneralInfo)+plviGeneralInfo->dwSerialNumberOffset);
    }
    else
    {
        tsSerialNumber = szUnavailable;
    }

    if(0 < plviGeneralInfo->dwSubscriberNumberSize)
    {
        tsSubscriberNumber = (WCHAR*)(((BYTE*)plviGeneralInfo)+plviGeneralInfo->dwSubscriberNumberOffset);
    }
    else
    {
        tsSubscriberNumber = szUnavailable;
    }
    // create the message box string.
    // 
    {
        TCHAR szManufacturer[80]; 
        TCHAR szModel[80]; 
        TCHAR szRevision[80];
        TCHAR szSerialNumber[80];
        TCHAR szSubscriberNumber[80];

        LoadString(g_hInstance, IDS_MANUFACTURER, szManufacturer, ARRAY_LENGTH(szManufacturer)); 
        LoadString(g_hInstance, IDS_MODEL, szModel, ARRAY_LENGTH(szModel)); 
        LoadString(g_hInstance, IDS_REVISION, szRevision, ARRAY_LENGTH(szRevision)); 
        LoadString(g_hInstance, IDS_SERIALNUMBER, szSerialNumber, ARRAY_LENGTH(szSerialNumber)); 
        LoadString(g_hInstance, IDS_SUBSCRIBERNUMBER, szSubscriberNumber, ARRAY_LENGTH(szSubscriberNumber)); 

        _sntprintf(szMBString, ARRAY_LENGTH(szMBString),
                   TEXT("%s: %s\n%s: %s\n%s: %s\n%s: %s\n%s: %s\n"),
                   szManufacturer, tsManufacturer, 
                   szModel, tsModel, 
                   szRevision, tsRevision, 
                   szSerialNumber, tsSerialNumber, 
                   szSubscriberNumber, tsSubscriberNumber);
    }
    // pop up the message box
    {
        TCHAR szExTapiLineInfo[80];
        LoadString(g_hInstance, IDS_EXTAPILINEINFO, szExTapiLineInfo, ARRAY_LENGTH(szExTapiLineInfo)); 
        MessageBox(NULL, szMBString, szExTapiLineInfo, MB_OK | MB_ICONINFORMATION);
    }
    bRetVal = TRUE;

cleanup:
    if (pLineGeneralInfoBytes) delete [] pLineGeneralInfoBytes;
    if (hLine) lineClose(hLine);
    if (hLineApp) lineShutdown(hLineApp);

    return bRetVal;
}

// ***************************************************************************
// 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;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美综合视频在线观看| 久久久亚洲精品一区二区三区| 欧美精品久久天天躁| 精品嫩草影院久久| 一区二区三区色| 高清视频一区二区| 欧美欧美欧美欧美| 亚洲少妇最新在线视频| 国产在线精品一区二区三区不卡| 欧美亚洲国产一区二区三区va| 国产欧美日韩不卡免费| 日韩电影在线一区| 91国内精品野花午夜精品| 久久久夜色精品亚洲| 美女视频网站黄色亚洲| 欧洲色大大久久| 国产精品福利电影一区二区三区四区| 免费欧美在线视频| 91麻豆精品国产91久久久资源速度| 综合久久国产九一剧情麻豆| 国产91在线|亚洲| 久久亚洲欧美国产精品乐播| 奇米四色…亚洲| 91精品国产欧美一区二区| 亚洲图片欧美视频| 欧美性大战久久久| 一区二区三区产品免费精品久久75| 成人激情动漫在线观看| 久久久欧美精品sm网站| 国产精品99久久久久久宅男| 亚洲精品一区二区精华| 美女www一区二区| 日韩欧美色电影| 老司机午夜精品99久久| 欧美变态tickling挠脚心| 蜜臀a∨国产成人精品| 欧美一区中文字幕| 久久超级碰视频| 精品国产乱子伦一区| 九九久久精品视频| 国产日韩精品久久久| 成人一二三区视频| 亚洲免费观看高清在线观看| 91小视频免费观看| 亚洲综合成人在线视频| 欧美精品一级二级| 麻豆久久久久久久| 久久一日本道色综合| 成人黄色免费短视频| 亚洲免费在线看| 91麻豆精品国产91久久久久| 捆绑紧缚一区二区三区视频| 国产日韩欧美在线一区| 91麻豆福利精品推荐| 亚洲国产欧美日韩另类综合 | 国产乱子伦视频一区二区三区| 2020国产精品久久精品美国| 成人午夜精品一区二区三区| 粉嫩高潮美女一区二区三区| 国产欧美视频一区二区三区| 91猫先生在线| 蜜臀久久99精品久久久久宅男| 久久夜色精品一区| 91色在线porny| 免费在线看成人av| 国产精品久久久久久久裸模| 欧美午夜影院一区| 国产精品18久久久久久vr | 久久综合狠狠综合久久综合88 | 欧美色窝79yyyycom| 精品无码三级在线观看视频| 国产精品成人免费在线| 666欧美在线视频| 成人av资源下载| 亚洲成人tv网| 国产精品久久久久精k8 | 视频在线在亚洲| 中文av字幕一区| 在线成人午夜影院| 99热在这里有精品免费| 麻豆一区二区99久久久久| 中文字幕亚洲区| 精品日本一线二线三线不卡| 日本电影亚洲天堂一区| 国产电影精品久久禁18| 日本v片在线高清不卡在线观看| 国产精品毛片大码女人| 日韩欧美国产一二三区| 欧美日韩亚洲另类| 97精品电影院| 国产suv精品一区二区三区| 日韩激情av在线| 一区二区在线观看免费| 国产精品麻豆久久久| 2023国产一二三区日本精品2022| 欧美精品在欧美一区二区少妇| 91天堂素人约啪| 成人av网站大全| 极品少妇一区二区| 免费精品视频在线| 香蕉久久一区二区不卡无毒影院| 国产精品久久久久久久久晋中| www成人在线观看| 日韩精品一区二区三区在线观看| 欧美色图天堂网| 91免费国产在线观看| 成人高清av在线| 国产不卡免费视频| 国产精品一二一区| 国内精品第一页| 国产乱码精品一品二品| 黑人巨大精品欧美一区| 蜜臀久久久久久久| 免费久久精品视频| 久久99精品久久久久久| 麻豆高清免费国产一区| 麻豆一区二区三| 久久99精品久久久久久| 另类小说色综合网站| 久久99久久久久久久久久久| 男女激情视频一区| 日韩电影免费一区| 欧美在线免费观看视频| 日本精品一区二区三区高清| 在线视频国内自拍亚洲视频| 色狠狠av一区二区三区| 欧美视频中文字幕| 欧美精品三级日韩久久| 欧美精品xxxxbbbb| 日韩美女天天操| 国产亚洲精品aa| 国产精品对白交换视频| 亚洲精品第1页| 亚洲成人精品一区二区| 奇米精品一区二区三区在线观看一 | 亚洲国产日韩综合久久精品| 婷婷丁香久久五月婷婷| 极品少妇一区二区| www.性欧美| 精品视频资源站| 日韩欧美激情在线| 国产精品入口麻豆九色| 亚洲国产精品一区二区www| 日本在线不卡一区| 国产激情一区二区三区四区 | 国产精品久久久久久户外露出| 亚洲综合网站在线观看| 久久精品国产**网站演员| 高清不卡一区二区在线| 欧美羞羞免费网站| 26uuu国产日韩综合| 亚洲精品国产精品乱码不99| 日本中文一区二区三区| 成人激情开心网| 在线不卡的av| 激情综合五月婷婷| 色综合久久中文综合久久牛| 91精品国产综合久久福利软件| 国产无一区二区| 亚洲第一主播视频| 国产成人鲁色资源国产91色综 | 粉嫩嫩av羞羞动漫久久久| 欧美性猛片xxxx免费看久爱| 精品国产一二三| 一区二区在线观看视频在线观看| 久久国产精品无码网站| 91视频你懂的| 国产亚洲精品7777| 青草国产精品久久久久久| 91视频一区二区三区| 久久午夜国产精品| 日韩精品国产精品| 91免费精品国自产拍在线不卡| 久久免费精品国产久精品久久久久 | 午夜免费久久看| 99久久伊人网影院| 久久日一线二线三线suv| 亚洲一区视频在线| 99国产欧美另类久久久精品| 久久品道一品道久久精品| 免费看欧美女人艹b| 欧美性大战久久| 亚洲免费在线观看| 成人理论电影网| 久久久国产精华| 麻豆中文一区二区| 91精品国产色综合久久不卡蜜臀| 樱花影视一区二区| 91麻豆国产香蕉久久精品| 国产免费久久精品| 国产成人午夜视频| 欧美成人综合网站| 日韩成人精品视频| 777精品伊人久久久久大香线蕉| 亚洲精品视频一区二区| 99re这里只有精品6| 国产精品久久影院| 不卡的电视剧免费网站有什么| 久久久不卡影院| 成人综合婷婷国产精品久久蜜臀|