因此,我試圖尋找幾個不同的答案。一,我認爲可能有希望是這樣的一個:檢查以太網上的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好的 - 我已經包含代碼作爲編輯。再次,對於之前缺乏代碼感到抱歉!感謝您評論:) –