笔者最近参与研发的一个产品里使用到了cdc mbim调制解调器,需求方要求能够正常在产品里显示mbim的信号强度,由于该设备是以网卡形式存在于系统中的,并不同于传统的以串口形式接入的适配器形式,所以这里并无法使用对串口发送AT+CSQ的方式取得信号强度。
通过查找MSDN,发现:win8里增加了一个类Windows.Networking,但遗憾的是这个类只能在metro应用里使用,而我们的产品还是传统风格的,所以这个类是不符合需求的。
(PS:每当有问题查找资料的时候都先想用谷歌,可现在,谷歌压根打不开了,而百度压根是个废物,昨天也是头脑抽了风,在BING里搜索了下,竟然找到了需要的东西。。。在这里鄙视一下!)
BING里查找到时候,在MSDN上找到这么一个mbnapi的库,(参考:http://msdn.microsoft.com/en-us/library/windows/desktop/dd323166(v=vs.85).aspx )
可惜的是俺对C++仅懂个皮毛,还无法看懂这个说明,幸运的时强大的BING带着我又找到了一个interop.mbnapi.dll的文件,这个dll是将上述的mbnapi.h的文件封装成的。这么一来就能够满足我的要求了。
也不说了,直接上代码吧:
VB.NET的
Private Class NetWorkAdapter
'mbnapi的说明:http://msdn.microsoft.com/en-us/library/windows/desktop/dd323166(v=vs.85).aspx
Public Function GetSignal(guid As System.Guid) As Integer
Dim mbnInfMgr As New MbnInterfaceManager
Dim infMgr As IMbnInterfaceManager = DirectCast(mbnInfMgr, IMbnInterfaceManager)
'string interfaceid = "{A9D0DFBC-C083-4EDE-B1FE-E7FC07116ACA}";
Dim interfaceid As String = guid.ToString
Try
Dim inf As IMbnInterface = infMgr.GetInterface(interfaceid)
'inf[0].InterfaceID;
'IMbnRadio radio = (IMbnRadio)inf;
Dim Signal As IMbnSignal = DirectCast(inf, IMbnSignal)
GetSignal = Signal.GetSignalStrength()
Catch ex As Exception
GetSignal = -1 '-1表明是发生了错误,意味着并不支持cdc mbim设备
End Try
End Function
End Class
本来我的代码是C#的,但VS里感觉封装COM类C#没有VB.NET方便,所以我将C#代码重写成了VB.Net的,若是需要C#的请自己去找工具转换。。。
上边的代码获取信号强度是依据本地连接的guid,在这里附上查找网络连接的guid的方法:
1、打开CMD或是powershell,推荐powershell(CMD界面太小了,复制的时候太麻烦)
2、输入getmac /v /s 127.0.0.1
3、输出的列表就是当前系统的所有网络连接(就是在本地连接文件夹里显示的),其中传输名称中的guid形式的字符串就是这个网络连接的guid值
好了,我就只提供这么多,因为我们的产品里只需要这个不需要操作,操作的话请参见api的说明文档,我连同api文件一起打包上传到csdn。。。
下载地址:http://download.csdn.net/detail/robake/8320631