經常看見網上有人問如何得到網線連上與拔出的狀態,在這里介紹幾種方法,也許對大家會有所幫助
第一種是通過OID進行查詢的方法
DWORD dwObj, dwStatus, dwBytesRet;
dwOIDCode = OID_GEN_MEDIA_CONNECT_STATUS;
DeviceIoControl(hAdapter, IOCTL_NDIS_QUERY_GLOBAL_STATS, &dwOIDCode, sizeof(dwOIDCode), &dwStatus,sizeof(dwStatus), &dwBytesRet, NULL);
printf("state is:%d\n",dwStatus);
dwStatus=0表示連上了,1代表未連上
但是經過我的測試,好像這里的狀態并不是代表網線的,而是代表網絡可用與不可用,網線插上,網絡正在連接,這種狀態下的網絡是不可用的
第二種是通過WMI進行查詢,WMI的功能很強大的
while (pEnumerator)
{
HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1,
&pclsObj, &uReturn);
if(0 == uReturn)
{
break;
}
VARIANT vtProp;
hr = pclsObj->Get(L"NdisMediaConnectStatus", 0, &vtProp, 0, 0);
if (vtProp.bstrVal)
{
NdisMediaConnectStatus++;
}
VariantClear(&vtProp);
}
經過測試,這種方法可以得到網線的狀態,如果要實時得到網線的連接狀態的話,可以開線程,當然資源充足的話也可以1秒查詢一次,但是這種方法在有多個網線的時候是不行的