自動獲取串列埠埠號(C 實現)

2022-07-23 13:18:21 字數 1447 閱讀 6449

問題描述:串列埠線鬆動或者其他原因導致串列埠通訊中斷時,需要開啟裝置管理器檢視埠號,然後在軟體中重新選擇埠號建立連線,這個過程比較麻煩。

解決辦法:使用win32_pnpentity wmi類來自動獲取裝置管理器中的串列埠埠號,在開啟軟體時,自動獲取需要的埠號,開啟串列埠建立通訊連線。

win32_pnpentity wmi類表示即插即用裝置的屬性,即插即用實體在控制面板的「裝置管理器」中顯示為條目。

侷限性:只適用於pc只有乙個串列埠或者usb轉串列埠的情況。如果同時有多個usb轉串列埠或者usb串列埠,就沒法很好地確定哪個埠號才是需要的埠號了。

例如裝置管理器中有多個usb轉串列埠:prolific usb-to-serial comm port (com11)

prolific usb-to-serial comm port (com12)

prolific usb-to-serial comm port (com13)

本次串列埠通訊中使用usb轉串列埠來通訊,且pc上只有乙個usb轉串列埠,實現**如下:

1

///2

///自動獲取串列埠的埠號

3///

4///

com號

5public

string

autogetcom()623

}24}25

searcher.dispose();

26}

2728}29

catch

3033

34string portnames =coms.toarray();

35foreach(string portname in

portnames)

3641}42

return

null

;43 }

managementobjectsearcher類:此類是檢索管理資訊的常用入口點之一。 例如,它可用於列舉系統上的所有磁碟驅動器,網路介面卡,程序和更多管理物件,或查詢已啟動的所有網路連線,暫停的服務等等。

實現過程中遇到的異常:system.management.manangementexception: invalid query

造成異常的原因是:query語句寫錯了

managementobjectsearcher searcher = new managementobjectsearcher("select * from" + win32_pnpentity);

注意:

1、有時候一直找不出異常原因,可以檢視一下wmi伺服器是否開啟了。

2、if (hardinfo.properties["name"].value != null) //操作之前先進行判空處理很有必要,不然操作空值會導致異常跑到catch處得不到自己想要的結果。

C 重用UDP埠號

以前碰到乙個問題,希望能夠重用udp的埠號,但一直沒有成功。今天偶然看到一段 竟然可以達到目的,欣喜中記下 ipaddress groupaddress ipaddress.parse 239.0.84.11 socket listener new socket addressfamily.inte...

C 重用UDP埠號

以前碰到乙個問題,希望能夠重用udp的埠號,但一直沒有成功。今天偶然看到一段 竟然可以達到目的,欣喜中記下 ipaddress groupaddress ipaddress.parse 239.0.84.11 socket listener new socket addressfamily.inte...

C 重用UDP埠號

ipaddress groupaddress ipaddress.parse 239.0.84.11 socket listener new socket addressfamily.internetwork,sockettype.dgram,protocoltype.udp listener.se...