標籤:c# vb.net powershell 3g訊號強度
筆者最近參與研發的一個產品裡使用到了cdc mbim數據機,需求方要求能夠正常在產品裡顯示mbim的訊號強度,由於該裝置是以網卡形式存在於系統中的,並不同於傳統的以串口形式接入的適配器形式,所以這裡並無法使用對串口發送AT+CSQ的方式取得訊號強度。
通過尋找MSDN,發現:win8裡增加了一個類Windows.Networking,但遺憾的是這個類只能在metro應用裡使用,而我們的產品還是傳統風格的,所以這個類是不符合需求的。
(PS:每當有問題尋找資料的時候都先想用Google,可現在,Google壓根打不開了,而百度壓根是個廢物,昨天也是頭腦抽了風,在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
本來My Code是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
對cdc mbim裝置的資訊擷取和操作