INetworkConnection
,NativeWiFi
之类的东西。但要么它们不能做到我想要的,要么我只是无法从可用的文档中弄清楚如何做。话虽如此,我想使用C++来检查运行此程序的设备是否通过以太网电缆连接到互联网。基本上,我想做以下事情:
- 如果计算机仅连接到无线电,运行程序
- 如果计算机仅连接有线电缆,请勿运行程序
- 如果计算机同时连接有线电缆和无线电,请勿运行程序
编辑:我还应该包括我到目前为止尝试过的内容。
我尝试使用
GetAdaptersInfo
并从PIP_ADAPTER_INFO
变量类型获取Type
特征,但无论我是否使用以太网,它始终给我Unknown type 71
。
GetAdaptersInfo
的文档在这里:https://msdn.microsoft.com/en-us/library/aa365917%28VS.85%29.aspx
谢谢bool is_on_ethernet{
PIP_ADAPTER_INFO pAdapterInfo;
PIP_ADAPTER_INFO pAdapter = NULL;
DWORD dwRetVal = 0;
UINT i;
struct tm newtime;
char buffer[32];
errno_t error;
ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO);
pAdapterInfo = (IP_ADAPTER_INFO *)malloc(sizeof(IP_ADAPTER_INFO));
if(pAdapterInfo == NULL)
printf("Error allocating memory need to call GetAdaptersInfo");
if(GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW){
free(pAdapterInfo);
pAdapterInfo = (IP_ADAPTER_INFO *)malloc(ulOutBufLen);
}
if((dwRetVal = GetAdaptersInfo(pAdapterInfo, &ulOutBufLen)) == NO_ERROR){
pAdapter = pAdapterInfo;
switch(pAdapter->Type){
case MIB_IF_TYPE_OTHER:
printf("Other\n");
return false;
break;
case MIB_IF_TYPE_ETHERNET:
printf("Ethernet\h");
return true;
break;
case MIB_IF_TYPE_TOKENRING:
printf("Token Ring\n");
return false;
break;
case MIB_IF_TYPE_FDDI
printf("FDDI\n");
return false;
break;
case MIB_IF_TYPE_PPP
printf("PPP\n");
return false;
break;
case MIB_IF_TYPE_LOOPBACK
printf("Lookback\n");
return false;
break;
case MIB_IF_TYPE_SLIP
printf("Slip\n");
return false;
break;
default
printf("Unknown type %ld\n\n", pAdapter->Type);
return false;
break;
}
}
if(pAdapterInfo)
free(pAdapterInfo);
return false;
}
if(...NO_ERROR)
后面)添加了一个while(pAdapterInfo->Next){}
循环,但似乎导致了无限循环。当你提到使用 Next 指针时,是不是指我实现了你的评论错误? - shovel_coder