2010-03-30 10 views
10

Czy C# zapewnia skuteczny sposób skanowania dostępnych portów COM? Chciałbym mieć listę rozwijaną w mojej aplikacji, w której użytkownik może wybrać jeden z wykrytych portów COM. Tworzenie i wypełnianie listy rozwijanej nie stanowi problemu. Po prostu muszę wiedzieć, jak skanować dostępne porty COM przy użyciu C#. Korzystam z Microsoft Visual C# 2008 Express Edition. Dzięki.Jak skanować porty COM w języku C#?

Odpowiedz

13

System.IO.Ports to przestrzeń nazw, którą chcesz.

SerialPort.GetPortNames wyświetli wszystkie porty szeregowe COM.

Niestety, porty równoległe nie są obsługiwane bezpośrednio z C#, ponieważ są one rzadko używane, z wyjątkiem starszych sytuacji. Powiedział, że można je wymienić, przeglądając następujący klucz rejestru:

HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\PARALLEL PORTS 

Zobacz nazw dla szczegółów.

+1

Dzięki za dodatkowe szczegóły, ale tak naprawdę interesuje mnie tylko lista portów szeregowych COM (nie równolegle). –

+1

@Jim Fell: Pomyślałem o tym za pierwszym razem, kiedy pisałem, ale w drugiej chwili zdecydowałem, że mówię wprost o paralelach, tak na wszelki wypadek. – Randolpho

+1

@Randolpho i doceniamy to, ponieważ pojawiły się one w wynikach wyszukiwania Google dla LPT. :) –

2

Użyj usługi WMI w przestrzeni nazw System.Management. Szybki Google wyszukuje ten kod:

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 lepsze rozwiązanie! –

+2

SerialPort.GetPortNames używa danych rejestru, które nie są aktualizowane. Jeśli użytkownik często podłącza i odłącza różne rzeczy, przekonałem się, że podejście klasy zarządzania jest bardziej niezawodne. – SteveCav

+0

Wystarczyło wyliczyć porty i poszedł do WMI. Jednak wydaje się, że nie obejmuje to adapterów USB do portu szeregowego, a przynajmniej nie ma ich na liście. Z 'SerialPort.GetPortNames', były i lista została natychmiast zaktualizowana. – OregonGhost

Powiązane problemy