2010-03-30 84 views
10

C#是否提供了掃描可用COM端口的有效方法?我想在我的應用程序中有一個下拉列表,用戶可以選擇其中一個檢測到的COM端口。創建並填充下拉列表不是問題。我只需要知道如何使用C#掃描可用的COM端口。我正在使用Microsoft Visual C#2008速成版。謝謝。如何在C#中掃描COM端口?

回答

13

System.IO.Ports是你想要的命名空間。

SerialPort.GetPortNames將列出所有串行COM端口。

不幸的是,並行端口並不直接支持C#,因爲它們在傳統情況下很少使用。這就是說,你可以通過查詢以下注冊表項列出來:

HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\PARALLEL PORTS 

見命名空間的細節。

+1

感謝您的額外的細節,但我真的只是列出串行COM端口(不是傳統的並行)感興趣。 – 2010-03-30 21:48:54

+1

@Jim Fell:我第一次發佈的時候就想到了,但第二個想法決定明確平行,以防萬一。 – Randolpho 2010-03-30 21:53:26

+1

@Randolpho我很欣賞它,因爲這只是針對LPT的Google搜索結果。 :) – 2014-01-14 14:19:37

2

通過System.Management命名空間使用WMI。快速谷歌發現此代碼:

using System; 
using System.Management; 

public class Foo 
{ 
    public static void Main() 
    { 
     var instances = new ManagementClass("Win32_SerialPort").GetInstances(); 
     foreach (ManagementObject port in instances) 
     { 
      Console.WriteLine("{0}: {1}", port["deviceid"], port["name"]); 
     } 
} 
+0

SerialPort.GetPortNames更好的解決方案! – 2010-03-30 21:03:52

+2

SerialPort.GetPortNames使用不保持最新的註冊表數據。如果用戶正在插拔很多東西,我發現管理類方法更可靠。 – SteveCav 2011-09-05 00:52:29

+0

只需要枚舉端口並進入WMI即可。但是,它似乎沒有包含USB到串口適配器,或者至少它們不在列表中。使用'SerialPort.GetPortNames',他們是,並且列表立即更新。 – OregonGhost 2011-09-23 09:40:08