WinCE获取Wifi的设备名、连接状态和信号强度

来源:互联网 发布:java进销存管理系统 编辑:程序博客网 时间:2024/05/17 04:20
Note:需CE4.0或更高版本(兼容NDIS5.1)支持
一、加入头文件
#include <winioctl.h>#include <ntddndis.h>#include <nuiouser.h>
二、Attach to NDISUIO
HANDLE hNdis = ::CreateFile( NDISUIO_DEVICE_NAME, GENERIC_ALL, 0, NULL, OPEN_EXISTING,                             FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,                             (HANDLE)INVALID_HANDLE_VALUE );

三、获取设备名称

UCHAR                  cbQueryBuffer[ 1024 ];PNDISUIO_QUERY_BINDING pQueryBinding;DWORD                  dwBytesReturned = 0;pQueryBinding = (PNDISUIO_QUERY_BINDING)&cbQueryBuffer[ 0 ];pQueryBinding->BindingIndex = 0;if ( ::DeviceIoControl( hNdis,                        IOCTL_NDISUIO_QUERY_BINDING,                        (LPVOID)&cbQueryBuffer[ 0 ],                        sizeof(NDISUIO_QUERY_BINDING),                        (LPVOID)&cbQueryBuffer[ 0 ],                        sizeof(cbQueryBuffer),                        &dwBytesReturned,                        NULL ) == TRUE ){    TCHAR* pDeviceName = (TCHAR*)( cbQueryBuffer + pQueryBinding->DeviceNameOffset );}

 

四、检测连接状态

NIC_STATISTICS nicStatistics = { 0 };DWORD          dwBytesReturned = 0;BOOL bConnected = FALSE;nicStatistics.ptcDeviceName = pDeviceName;if ( ::DeviceIoControl( hNdis,                        IOCTL_NDISUIO_NIC_STATISTICS,                        NULL,                        0,                        &nicStatistics,                        sizeof(NIC_STATISTICS),                        &dwBytesReturned,                        NULL ) == TRUE ){    bConnected = ( nicStatistics.MediaState == MEDIA_STATE_CONNECTED );}

五、获取信号强度

// example.// < -90 : No Signal// < -81 : Very Low// < -71 : Low// < -67 : Good// < -57 : Very Good// ...   : ExcellentNDISUIO_QUERY_OID ndisQueryOid = { 0 };DWORD             dwBytesReturned = 0;int nDb = 0;ndisQueryOid.Oid = OID_802_11_RSSI;ndisQueryOid.ptcDeviceName = pDeviceName;if ( ::DeviceIoControl( hNdis,                        IOCTL_NDISUIO_QUERY_OID_VALUE,                        (LPVOID)&ndisQueryOid,                        sizeof(ndisQueryOid),                        (LPVOID)&ndisQueryOid,                        sizeof(ndisQueryOid),                        &dwBytesReturned,                        NULL ) == TRUE ){    ::CopyMemory( &nDb, &ndisQueryOid.Data[ 0 ], sizeof(ULONG) );}
原创粉丝点击