当前位置: 代码迷 >> Windows Mobile >> 如何判断当前的连接是CMWAP 还是CMNET?
  详细解决方案

如何判断当前的连接是CMWAP 还是CMNET?

热度:262   发布时间:2016-04-25 08:05:36.0
怎么判断当前的连接是CMWAP 还是CMNET??
如题:

------解决方案--------------------
直接给你代码得了。
C/C++ code
HRESULT GetAPNFromEntryName(LPCTSTR szEntryName, LPTSTR szAPN, int cchAPN){    // parm query formating string of "CM_GPRSEntries Configuration Service Provider"    LPCTSTR szFormat =    TEXT("<wap-provisioningdoc>")        TEXT("    <characteristic type=\"CM_GPRSEntries\">")        TEXT("        <characteristic type=\"%s\">")        TEXT("            <characteristic type=\"DevSpecificCellular\">")        TEXT("                <parm-query name=\"GPRSInfoAccessPointName\"/>")        TEXT("            </characteristic>")        TEXT("        </characteristic>")        TEXT("    </characteristic>")        TEXT("</wap-provisioningdoc>");    HRESULT hr = E_FAIL;    LPTSTR szOutput   = NULL;    if(NULL == szEntryName)        return E_INVALIDARG;    // prepare the query string with the special entry name    LPTSTR szInput = new TCHAR[_tcslen(szFormat) + _tcslen(szEntryName) + 10];    if(NULL == hr)        return E_OUTOFMEMORY;    _stprintf(szInput, szFormat, szEntryName);    // Process the XML.    hr = DMProcessConfigXML(szInput, CFGFLAG_PROCESS, &szOutput);    if(S_OK == hr)    {        hr = E_FAIL;        // find the value of GPRSInfoAccessPointName param        LPTSTR szAPNStrStart = _tcsstr(szOutput, TEXT("value=\""));        if(NULL != szAPNStrStart)        {            szAPNStrStart += _tcslen(TEXT("value=\""));            // find the end of value string            LPTSTR szAPNStrEnd = _tcsstr(szAPNStrStart, TEXT("\""));            if(NULL != szAPNStrEnd)            {                // set the null char at the end of the value string                *szAPNStrEnd = TEXT('\0');                // get the final Access Point Name string                _tcsncpy(szAPN, szAPNStrStart, cchAPN);                hr = S_OK;            }        }    }    // the caller must delete the XML returned from DMProcessConfigXML.    delete[] szOutput;    // clear the input string    delete[] szInput;    return hr;}void fun(){        char m_sNowTraffic[255];    DWORD dwSize = 0;    HRESULT hr = E_FAIL;    //    // Get the the required size of the buffer     // with which the function needs to be called on the next attempt.    //    hr = ConnMgrQueryDetailedStatus(NULL, &dwSize);    if(STRSAFE_E_INSUFFICIENT_BUFFER != hr)        return hr;    LPBYTE pBuffer = new BYTE[dwSize];    if(NULL == pBuffer)        return E_OUTOFMEMORY;    //    // Get the connection information    //    hr = ConnMgrQueryDetailedStatus((CONNMGR_CONNECTION_DETAILED_STATUS*)pBuffer, &dwSize);    if(S_OK == hr)    {        //        // Enum each connection entry        //        CONNMGR_CONNECTION_DETAILED_STATUS* cmStatus  = (CONNMGR_CONNECTION_DETAILED_STATUS*)pBuffer;        while(NULL != cmStatus)        {            // find the connected GPRS entry            if((cmStatus->dwParams & (CONNMGRDETAILEDSTATUS_PARAM_TYPE | CONNMGRDETAILEDSTATUS_PARAM_DESCRIPTION | CONNMGRDETAILEDSTATUS_PARAM_CONNSTATUS)) &&                CM_CONNTYPE_CELLULAR == cmStatus->dwType &&                CONNMGR_STATUS_CONNECTED == cmStatus->dwConnectionStatus &&                NULL != cmStatus->szDescription)                    {                // get the connected GPRS APN                if(S_OK == GetAPNFromEntryName(cmStatus->szDescription, (LPTSTR)szAPN, 200))                    MessageBox((LPTSTR)szAPN, cmStatus->szDescription,MB_OK | MB_ICONINFORMATION);            }            // test the next one            cmStatus = cmStatus->pNext;        }    }    // clear the buffer    delete pBuffer;}
------解决方案--------------------