2011-07-04 29 views
1

我需要在我的Windows Mobile 6.5 C/C++應用程序中檢測是否存在TCP/IP連接,如果是,然後檢測它是WiFi還是3G。我怎麼能這樣做?我找到了一些C#示例,但沒有用於C/C++。檢查是否有TCP/IP連接,以及它是WiFi還是3G - Windows Mobile 6.5 - C/C++

任何提示將不勝感激。

TIA, MeCoco

+0

如果您共享這些C#示例的鏈接,那麼我們可能會成功提供相應的本地解決方案。 –

回答

0

我沒有實際做過,所以這個答案將是一個受過教育的猜測。

我的猜測是,首先通過嘗試ping或解析某個已知良好的遠程地址來查看是否有任何連接。如果可行,你可以通過Connection Manager APIs查詢通訊使用的連接。

那時你可能不知道它是WiFi還是3G。儘管如此,你也許可以通過use ossvcs.dll來推斷它是基於無線電類型的。

+0

對於Pocket PC 200x和早於Windows Mobile 5.0的版本,可以使用類似於使用無線電接口層或OSSVCS.DLL的方法。對於Windows Mobile 5.0和更高版本,有一個名爲ConnMgrQueryDetailedStatus的連接管理器功能,它可以枚舉現有的ConnMgr連接並告訴你它是3G,EDGE,Wi-Fi,以太網,DTPT,GPRS,CDMA,EVDO等。 –

1

這可以使用連接管理器API。該函數的名稱是ConnMgrQueryDetailedStatus。您感興趣的CONNMGR_CONNECTION_DETAILED_STATUS結構字段是:dwParams,dwType和dwSubtype。

// TODO: Fill in the structure using ConnMgrQueryDetailedStatus in a loop until it succeeds. 

// Check to see if there is an active Wi-Fi connection currently available to ConnMgr. 
BOOL IsWiFiAvailable(CONNMGR_CONNECTION_DETAILED_STATUS* ccds) 
{ 
    return ccds->dwParams & CONNMGRDETAILEDSTATUS_PARAM_SUBTYPE && 
      ccds->dwParams & CONNMGRDETAILEDSTATUS_PARAM_TYPE && 
      ccds->dwType == CM_CONNTYPE_NIC && 
      ccds->dwSubtype == CM_CONNSUBTYPE_NIC_WIFI; 
} 


// Check to see if there is an active Wi-Fi connection currently available to ConnMgr. 
BOOL Is3GAvailable(CONNMGR_CONNECTION_DETAILED_STATUS* ccds) 
{ 
    // This will return FALSE if you have non 3G GPRS connection available. 
    return ccds->dwParams & CONNMGRDETAILEDSTATUS_PARAM_SUBTYPE && 
      ccds->dwParams & CONNMGRDETAILEDSTATUS_PARAM_TYPE && 
      ccds->dwType == CM_CONNTYPE_CELLULAR_GPRS && 
      ccds->dwSubtype == CM_CONNSUBTYPE_CELLULAR_UMTS; 
} 
相關問題