因此,我试图寻找几个不同的答案。一,我认为可能有希望是这样的一个:检查以太网上的Windows计算机是否通过C++
How to check network interface type is Ethernet or Wireless on Windows using Qt?
不过,我真的不知道太多关于网络,甚至有关Windows。就我个人而言,我无法理解他们网站上的大部分Microsoft文档。我尝试了一些东西,比如INetworkConnection
,NativeWiFi
等。但是他们没有做我想做的事,或者我无法弄清楚如何从可用的文档中做到这一点。
有了这样说,我想用C++,以检查是否该程序正在运行的设备连接到经由以太网电缆互联网。基本上,我要做到以下几点:
- 如果计算机连接到无线只,运行程序
- 如果计算机连接到有线只,不运行程序
- 如果计算机连接到有线和无线,不要运行程序
但是,问题是我不知道如何检查设备是否有以太网连接。有没有办法做到这一点?我没有使用QT。谢谢!编辑:我还应该包括我到目前为止尝试过的东西。
我尝试使用GetAdaptersInfo
和获取Type
特质从PIP_ADAPTER_INFO
变量类型,但总是给我Unknown type 71
无论我是在以太网或没有。
为GetAdaptersInfo
的文档是在这里: https://msdn.microsoft.com/en-us/library/aa365917%28VS.85%29.aspx
感谢
编辑2:这里是我使用GetAdaptersInfo
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;
}
你有你试图使用GetAdaptersInfo的示例代码?我做的是 –
;我现在将其添加为编辑。对不起,不包括! –
@ Nighthawk441好的 - 我已经包含代码作为编辑。再次,对于之前缺乏代码感到抱歉!感谢您评论:) –