經(jīng)常看見網(wǎng)上有人問如何得到網(wǎng)線連上與拔出的狀態(tài),在這里介紹幾種方法,也許對大家會有所幫助
第一種是通過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代表未連上
但是經(jīng)過我的測試,好像這里的狀態(tài)并不是代表網(wǎng)線的,而是代表網(wǎng)絡(luò)可用與不可用,網(wǎng)線插上,網(wǎng)絡(luò)正在連接,這種狀態(tài)下的網(wǎng)絡(luò)是不可用的
第二種是通過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);
}
經(jīng)過測試,這種方法可以得到網(wǎng)線的狀態(tài),如果要實時得到網(wǎng)線的連接狀態(tài)的話,可以開線程,當(dāng)然資源充足的話也可以1秒查詢一次,但是這種方法在有多個網(wǎng)線的時候是不行的