这些结构定义和构造函数在我的代码中工作,来自WlanGetAvailableNetworkList,它是不完整的,并不完全解析结构,但它确实得到了RSSI。

[StructLayout(LayoutKind.Sequential)]

public struct WLAN_AVAILABLE_NETWORKS_LIST

{

public UInt32 NumberOfNetworks;

//Current Not used by Native System, can be used to indicate desired network

public UInt32 CurrentNetwork;

//one per network found

public WLAN_AVAILABLE_NETWORK[] Available_Network;

//input for constructor

private IntPtr p;

public WLAN_AVAILABLE_NETWORKS_LIST(IntPtr _p)

{

IntPtr pn = new IntPtr();

// TODO: Complete member initialization

this.p = _p;

this.NumberOfNetworks = (UInt32)Marshal.ReadInt32(p);

this.CurrentNetwork = (UInt32)Marshal.ReadInt32(p, 4);

this.Available_Network = new WLAN_AVAILABLE_NETWORK[NumberOfNetworks];

for (int i = 0; i < NumberOfNetworks; i++)

{

pn = (IntPtr)(p.ToInt32() + 8 + (628 * i));

//Available_Network[i] = (WLAN_AVAILABLE_NETWORK)Marshal.PtrToStructure(pn, typeof(WLAN_AVAILABLE_NETWORK));

Available_Network[i].strProfileName = Marshal.PtrToStringUni(pn);

Available_Network[i].SSID = new dot11_SSID(new IntPtr(pn.ToInt32() + 512));

Available_Network[i].dot11BssType = (DOT11_BSS_TYPE)Marshal.ReadInt32(pn, 512 + 36);

Available_Network[i].uNumberOfBssids = (UInt32)Marshal.ReadInt32(pn, 512+36+4);

Available_Network[i].wlanSignalQuality = (UInt32)Marshal.ReadInt32(pn, 512 + 36 + 5*4+32+4);

}

}

}WLAN_AVAILABLE_NETWORK的结构

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]

public struct WLAN_AVAILABLE_NETWORK //size = 628

{

[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]

public string strProfileName;//size 512

public dot11_SSID SSID;//size 36

public DOT11_BSS_TYPE dot11BssType; // size 4

public UInt32 uNumberOfBssids; // 4

//public bool bNetworkConnectable; // 4

//public UInt32 wlanNotConnectableReason; // 4

//public UInt32 uNumberOfPhyTypes; // 4

public DOT11_PHY_TYPE[] dot11PhyTypes; // max is 8, size is 8*4 = 32

//public UInt32[] dot11PhyTypes; // max is 8, size is 8*4 = 32

//public bool bMorePhyTypes;// 4

public UInt32 wlanSignalQuality; // size 4

//A percentage value that represents the signal quality of the network. WLAN_SIGNAL_QUALITY is of type ULONG. This member contains a value between 0 and 100. A value of 0 implies an actual RSSI signal strength of -100 dbm. A value of 100 implies an actual RSSI signal strength of -50 dbm. You can calculate the RSSI signal strength value for wlanSignalQuality values between 1 and 99 using linear interpolation.

//public bool bSecurityEnabled;// 4

public DOT11_AUTH_ALGORITHM dot11DefaultAuthAlgorithm;// 4

public DOT11_CIPHER_ALGORITHM dot11DefaultCipherAlgorithm;// 4

//public UInt32 dot11DefaultAuthAlgorithm;// 4

//public UInt32 dot11DefaultCipherAlgorithm;// 4

//public UInt32 dwFlags;// 4

//public UInt32 dwReserved;// 4

}我无法使Marshal.PtrToStructure工作。

这是调用WlanGetAvailableNetworkList的函数

public static WLAN_AVAILABLE_NETWORKS_LIST GetAvailNetworkList()

{

UInt32 _dwflags = 3;

IntPtr handle = GetClientHandle();

IntPtr pGuid = GetCurrentInterfaceGuidPointer();

IntPtr _ppAvailNetworkList = new IntPtr();

uint error = WlanGetAvailableNetworkList(handle, pGuid, _dwflags, IntPtr.Zero, out _ppAvailNetworkList);

if (error != 0)

{

Console.WriteLine("WlanEnumerated function in GetAvailNetworkPointer() failed... inspect error number" + error);

}

else

{

// It worked

}

WLAN_AVAILABLE_NETWORKS_LIST TempNetworkList = new WLAN_AVAILABLE_NETWORKS_LIST(_ppAvailNetworkList);

WlanFreeMemory(pGuid);

CloseClientHandle(handle);

return TempNetworkList;

}以及确认有RSSI值的NUINT测试。

[Test]

public void GetAvailNetworkReturnsRSSI()

{

WiFiApi.WLAN_AVAILABLE_NETWORKS_LIST networklist = WiFiApi.GetAvailNetworkList();

for (int i = 0; i < networklist.NumberOfNetworks; i++)

{

string SSIDstr = new string(networklist.Available_Network[i].SSID.SSID);

Console.Write("Network " + i + " ");

Console.Write(SSIDstr);

Console.Write(" RSSI = " + networklist.Available_Network[i].wlanSignalQuality);

Console.Write(" dbM = " + ((int)(networklist.Available_Network[i].wlanSignalQuality/2)-100));

Console.WriteLine(" ");

if (0 != networklist.Available_Network[i].SSID.SSID_Length)

{

Assert.LessOrEqual((int)networklist.Available_Network[i].wlanSignalQuality, 100);

Assert.Greater((int)networklist.Available_Network[i].wlanSignalQuality, 0);

}

}

}

rssi参数获取_如何获取WlanGetNetworkBssList函数返回值的Rssi值相关推荐

  1. python函数定义中参数列表里的参数是_详解Python函数中参数带星号是什么意思

    函数的参数使用除了常规的位置参数和关键字参数外,还支持可变个数的函数参数,这种支持可变个数的参数方法称为参数收集,对应的参数称为收集参数. 一.参数收集的定义 Python的函数支持可变不定数量的参数 ...

  2. mysql函数返回表类型_如何从MySQL函数返回表?

    您不能从MySQL函数返回表.该函数可以返回字符串,整数,字符等.要从MySQL返回表,请使用存储过程,而不是函数. 让我们首先创建一个表-mysql> create table DemoTab ...

  3. mysql 元数据获取_[MySQL] 获取元数据的步骤

    [MySQL] 获取元数据的方法 MySQL提供了以下三种方法用于获取数据库对象的元数据: 1)show语句 2)从INFORMATION_SCHEMA数据库里查询相关表 3)命令行程序,如mysql ...

  4. 参数 中_理解JavaScript中函数的参数

    1,arguments JavaScript的函数的参数(arguments)在函数体的内部表现为一个类似数组的对象.就是它拥有数组的方法,却不是Array的实例. 例1 我们直接打印出argumen ...

  5. mysql identity 获取_如何获取MySQL中Identity列的种子值?

    为此,您可以使用SHOW VARIABLES命令-SHOW VARIABLES LIKE 'auto_inc%'; 输出结果 这将产生以下输出-+--------------------------+ ...

  6. double fun在c语言中是什么意思,编写函数 double fun(double x,double y),计算两参数平方差的绝对值,做为函数返回值....

    编写函数fun,函数首部为double fun(int n),其功能是计算S=1!+2!+3!... 6个答案 - 提问时间: 2011-10-13 - 6个赞 问题说明:"S=1!+2!+3!+.. ...

  7. py函数式编程(高阶函数map/reduce/filter/sorted、闭包函数/返回函数、匿名函数lamber、@装饰器decorator、偏函数functool.partial())

    #py函数式编程.py #高阶函数map/reduce/filter/sorted.闭包函数/返回函数.匿名函数lamber.@装饰器decorator.偏函数functool.partial()# ...

  8. python中len函数返回值为int吗_Python len()函数

    目录 描述 语法 参数说明 举例 1. 当参数是序列类型对象(字符.字符串.列表.元组或者是字典)时: 2. 当参数是非序列对象时: 注意事项 描述 len函数返回序列类型对象(字符或字符串.元组.列 ...

  9. Python函数返回多个值的方法

    如果程序需要有多个返回值,则既可将多个值包装成列表之后返回,也可直接返回多个值.如果 Python 函数直接返回多个值,Python 会自动将多个返回值封装成元组. 如下程序示范了函数直接返回多个值的 ...

  10. python函数返回多个变量_Python中接收函数多个返回结果的两种方法

    在Python中函数经常会返回多个值,今天我们一起来讲解一下接收多个函数返回值的方法 工具/原料 电脑 Python开发工具 方法/步骤 1 用def 代码创建一个函数,名称为func1 代码如下: ...

最新文章

  1. 认认真真推荐几个机器学习、深度学习公众号
  2. 6款实用开源报表工具 | 码云周刊第 83 期
  3. Java1.5语言新特性简单总结
  4. 服务器2003蓝屏A5修复,求助windows 2003 蓝屏分析
  5. python中时间处理去空格去冒号_Python实用日期时间处理方法汇总
  6. 文本预处理跑得慢?抱抱脸团队又放福利,1GB文本语料分词只需20s!
  7. jsp数据 foreach 循环遍历 (含效果图)- 代码篇
  8. 史上最全数据库中间件详解
  9. CentOS 7 上搭建 Nacos Cluster 集群
  10. 一个C++的ElasticSearch Client
  11. 计算机组成原理期末总结
  12. 新特性解读 | MySQL 8.0 对 limit 的优化
  13. 毕业设计计算机选题意义怎么写,毕业设计(论文)选题 毕业论文选题研究意义怎么写...
  14. 《小QQ 大帝国 马化腾传奇》熊江
  15. matlab 双馈,基于Matlab的双馈调速系统研究
  16. 页面报错$injector:unpr
  17. liunx系统的根结构认识及命令学习
  18. NLP-D35-nlp比赛D4【run baselines】-回家-h5pypicklewith open() as
  19. chrome打开本地html自动刷新,谷歌浏览器插件Auto Refresh 网页自动刷新
  20. CV5200远距离WiFi模组,安防监控数据远程传输方案,支持mesh自组网

热门文章

  1. bsod错误代码。_BSOD的完整形式是什么?
  2. 计算机组成与原理第二章,计算机组成原理《第二章》
  3. STM32F103标准库函数驱动max30102心率血氧模块
  4. oracle 有if语句吗,oracle的if语句
  5. 京瓷打印机p5026cdn_京瓷p5026cdn打印机驱动
  6. 计算机硕士工资一览表
  7. Yoshua Bengio:注意力是“有意识”AI的核心要素
  8. 图灵奖得主Bengio和LeCun称自监督学习可使AI达到人类智力水平
  9. Windows10 查看电脑关机时间(提交忘记打卡申请必备)
  10. OTSU算法实现二值化