2010-03-30 2 views
10

C#은 사용 가능한 COM 포트를 검색하는 효과적인 방법을 제공합니까? 사용자가 탐지 된 COM 포트 중 하나를 선택할 수있는 응용 프로그램의 드롭 다운 목록을 갖고 싶습니다. 드롭 다운 목록을 만들고 채우는 것은 문제가되지 않습니다. C#을 사용하여 사용 가능한 COM 포트를 검색하는 방법을 알아야합니다. Microsoft Visual C# 2008 Express Edition을 사용하고 있습니다. 감사.C#에서 COM 포트를 검색하는 방법은 무엇입니까?

답변

13

System.IO.Ports은 원하는 네임 스페이스입니다.

SerialPort.GetPortNames은 모든 직렬 COM 포트를 나열합니다.

불행히도 병렬 포트는 레거시 상황을 제외하고는 거의 사용되지 않으므로 C#에서 직접 지원되지 않습니다. 즉, 다음 레지스트리 키를 쿼리하여 그들을 나열 할 수 있습니다 말했다

HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\PARALLEL PORTS 

은 자세한 내용은 네임 스페이스를 참조하십시오.

+1

추가 세부 정보 주셔서 감사합니다.하지만 실제로는 직렬 COM 포트 (기존 병렬이 아닌)를 나열하는 데 관심이 있습니다. –

+1

@ 짐 펠 (Jim Fell) : 처음 게시했을 때 많은 것을 알았지 만, 두 번째 생각으로는 평행에 대해 명확히하기로 결정했습니다. – Randolpho

+1

@ 랜돌 포 (Randolpho)와 나는 이것을 고맙게 생각한다. LPT를위한 Google 검색 결과에 나온 것 뿐이다. :) –

2

System.Management 네임 스페이스를 통해 WMI를 사용하십시오. Google에서 신속하게 다음 코드를 찾습니다.

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 더 나은 솔루션! –

+2

SerialPort.GetPortNames는 최신 상태로 유지되지 않는 레지스트리 데이터를 사용합니다. 사용자가 플러그를 뽑고 플러그를 뽑으면 관리 클래스 접근 방식이 더 안정적이라는 것을 알게되었습니다. – SteveCav

+0

포트를 열거하고 WMI를 사용하기 만하면됩니다. 그러나 USB 대 직렬 어댑터는 포함되지 않거나 적어도 목록에없는 어댑터는 포함되지 않습니다. 'SerialPort.GetPortNames'와 함께, 그것들은 목록이고, 목록은 즉시 업데이트되었습니다. – OregonGhost

관련 문제