C++无线网络信号强度
C++ Wifi Signal Strength
我正在尝试在Windows 7机器上使用c ++获取连接的wifi信号的强度。
我可以使用命令WlanGetAvailableNetworkList
获取信号强度的值,但返回的值不足以满足我们的要求。 基本上,当您离开Wifi路由器时,该值以20%(99%->80%->60%等(的增量跳跃。
对于我们正在开发的应用程序,我们确实需要一个更准确的值。 我知道这是可能的,因为我在窗口中看到应用程序显示信号强度的准确 dBm 值......
如果有人有任何建议,他们将不胜感激!
dwResult = WlanGetAvailableNetworkList(hClient,&pIfInfo->InterfaceGuid,0,NULL,&pBssList);
if (dwResult != ERROR_SUCCESS) {
wprintf(L"WlanGetAvailableNetworkList failed with error: %un", dwResult);
dwRetVal = 1;
} else {
for (j = 0; j < pBssList->dwNumberOfItems; j++) {
pBssEntry = (WLAN_AVAILABLE_NETWORK *) & pBssList->Network[j];
if ((pBssEntry->dwFlags & WLAN_AVAILABLE_NETWORK_CONNECTED ) != 0 ){
if (pBssEntry->wlanSignalQuality == 0)
iRSSI = -100;
else if (pBssEntry->wlanSignalQuality == 100)
iRSSI = -50;
else
iRSSI = -100 + (pBssEntry->wlanSignalQuality/2);
wprintf(L" Signal Quality[%u]:t %u (RSSI: %i dBm)n", j,
pBssEntry->wlanSignalQuality, iRSSI);
}
}
好的,
在网上继续研究后,我设法拼凑出一种适合我的方法。 从我所读到的内容来看 - 有许多不同的方法可以获得 RSSI - 但这种方法虽然可能有点麻烦,但非常适合我们的需求......
我正在使用命令WlanGetNetworkBssList,然后直接从返回的PWLAN_BSS_ENTRY获取RSSI值。
我发现在查询WlanGetNetworkBssList之前每次调用WlanScan很重要,否则返回的值不会以任何规律性改变。
HANDLE hClient;
PWLAN_INTERFACE_INFO_LIST pIfList = NULL;
PWLAN_INTERFACE_INFO pIfConnInfo = NULL;
PWLAN_CONNECTION_ATTRIBUTES pConnectInfo = NULL;
PWLAN_BSS_LIST pBssList=NULL;
PWLAN_BSS_ENTRY pBssEntry=NULL;
WLAN_OPCODE_VALUE_TYPE opCode = wlan_opcode_value_type_invalid;
DWORD dwResult = 0;
DWORD dwMaxClient = 2;
DWORD dwCurVersion = 0;
DWORD connectInfoSize = sizeof(WLAN_CONNECTION_ATTRIBUTES);
int i;
// Initialise the Handle
dwResult = WlanOpenHandle(dwMaxClient, NULL, &dwCurVersion, &hClient);
if (dwResult != ERROR_SUCCESS)
{
return 0;
}
// Get the Interface List
dwResult = WlanEnumInterfaces(hClient, NULL, &pIfList);
if (dwResult != ERROR_SUCCESS)
{
return 0;
}
//Loop through the List to find the connected Interface
PWLAN_INTERFACE_INFO pIfInfo = NULL;
for (i = 0; i < (int) pIfList->dwNumberOfItems; i++)
{
pIfInfo = (WLAN_INTERFACE_INFO *) & pIfList->InterfaceInfo[i];
if (pIfInfo->isState == wlan_interface_state_connected)
{
pIfConnInfo = pIfInfo;
break;
}
}
if ( pIfConnInfo == NULL )
return 0;
// Query the Interface
dwResult = WlanQueryInterface(hClient,&pIfConnInfo->InterfaceGuid,wlan_intf_opcode_current_connection,NULL,&connectInfoSize,(PVOID *) &pConnectInfo,&opCode);
if (dwResult != ERROR_SUCCESS)
{
return 0;
}
// Scan the connected SSID
dwResult = WlanScan(hClient,&pIfConnInfo->InterfaceGuid,&pConnectInfo->wlanAssociationAttributes.dot11Ssid,NULL,NULL);
if (dwResult != ERROR_SUCCESS)
{
return 0;
}
// Get the BSS Entry
dwResult = WlanGetNetworkBssList(hClient,&pIfConnInfo->InterfaceGuid,&pConnectInfo->wlanAssociationAttributes.dot11Ssid,dot11_BSS_type_infrastructure,TRUE,NULL,&pBssList);
if (dwResult != ERROR_SUCCESS)
{
return 0;
}
// Get the RSSI value
pBssEntry=&pBssList->wlanBssEntries[0];
return pBssEntry->lRssi;
wlanSignalQuality是RSSI的插值。看看这个答案问题,了解如何直接获取RSSI:
从窗口获取 rssi 值
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- Qt VTK交互风格的信号到小部件
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- GetShortPathName在网络驱动器上使用中文文件夹时失败
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何在没有信号的情况下从C++执行QML插槽
- 为什么Bazel在重新启动或更改无线网络后进行重建
- 如何使用Qt在Windows上检查网络接口类型是以太网或无线
- iOS 上的 TCP 流不会显示在无线网络上
- libpcap和无线信号捕获
- 使用 C 扫描无线网络
- 如何在QT或Windows API中连接到无线WIFI网络
- C++无线网络信号强度
- 如何在 OS X 下以编程方式加入无线网络
- 视觉原生无线网络 API C++.关闭/打开无线网络
- 有可能在无线信号强度方面获得更高的精度吗
- 使用stlplus库在有线网络中连接,在无线网络中不连接
- 无法在无线网络上通过UDP广播进行快速传输
- Qt在网络上的信号/时隙机制
- 全局路由 结合无线网络和点对点连接时出错