我需要在Windows Mobile 6.5 C / C ++应用程序中检测是否存在TCP / IP连接,如果是,则检测是否为WiFi或3G。我怎么能这样做?我找到了一些C#样本,但没有用于C / C ++。
任何提示都会受到赞赏。
TIA, MeCoco
答案 0 :(得分:1)
使用Connection Manager 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;
}
答案 1 :(得分:0)
我以前没有真正做到这一点,所以这个答案将是一个有根据的猜测。
我的猜测是,首先你要通过尝试ping或解决一些已知良好的远程地址来查看你是否有任何连接。如果可行,您可以查看Connection Manager APIs以查找正在用于通信的连接。
此时你可能不知道它是WiFi还是3G。您可以use ossvcs.dll推断它基于无线电类型。