2010-03-30 62 views
10

C# có cung cấp phương tiện hiệu quả để quét các cổng COM có sẵn không? Tôi muốn có một danh sách thả xuống trong ứng dụng của tôi trong đó người dùng có thể chọn một trong các cổng COM được phát hiện. Tạo và điền vào danh sách thả xuống không phải là một vấn đề. Tôi chỉ cần biết làm thế nào để quét cho các cổng COM có sẵn bằng cách sử dụng C#. Tôi đang sử dụng Microsoft Visual C# 2008 Express Edition. Cảm ơn.Làm thế nào để quét cổng COM trong C#?

Trả lời

13

System.IO.Ports là không gian tên bạn muốn.

SerialPort.GetPortNames sẽ liệt kê tất cả các cổng COM nối tiếp.

Thật không may, các cổng song song không được hỗ trợ trực tiếp từ C#, vì chúng thường được sử dụng không thường xuyên ngoại trừ trong các tình huống cũ. Điều đó nói rằng, bạn có thể liệt kê chúng bằng cách truy vấn các khóa registry sau đây:

HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\PARALLEL PORTS 

Xem namespace để biết chi tiết.

+1

Cảm ơn các chi tiết bổ sung, nhưng tôi thực sự chỉ quan tâm đến việc liệt kê các cổng COM nối tiếp (không song song kế thừa). –

+1

@Jim Fell: Tôi đã tìm được bao nhiêu lần đầu tiên tôi đăng, nhưng suy nghĩ thứ hai đã quyết định rõ ràng về song song, chỉ trong trường hợp. – Randolpho

+1

@Randolpho và tôi đánh giá cao vì điều này vừa xuất hiện trên kết quả tìm kiếm của Google cho LPT. :) –

2

Sử dụng WMI thông qua không gian tên System.Management. Google nhanh chóng tìm thấy mã này:

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 giải pháp tốt hơn! –

+2

SerialPort.GetPortNames sử dụng dữ liệu đăng ký không được cập nhật. Nếu người dùng đang cắm và tháo nhiều thứ, tôi đã tìm thấy cách tiếp cận quản lý để đáng tin cậy hơn. – SteveCav

+0

Chỉ cần liệt kê các cổng và đi cho WMI. Tuy nhiên, nó dường như không bao gồm bộ điều hợp USB-to-serial, hoặc ít nhất là chúng không có trong danh sách. Với 'SerialPort.GetPortNames', chúng đã và danh sách được cập nhật ngay lập tức. – OregonGhost

Các vấn đề liên quan