专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > Windows Mobile

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

发布时间:2010-05-30 01:01:07 文章来源:www.iduyao.cn 采编人员:星星草
怎么判断当前的连接是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;
}

------解决方案--------------------
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: