« USB経由でLED点滅実験 | トップページ | ADコンバータの定電流源を使用してみました »

2011年9月19日 (月)

C# でシリアルポートを列挙する方法

System.IO.Ports.SerialPort.GetPortNames() を使用すればシリアルポート名を列挙できます。
しかしこのクラスでは「COM+数字」というシリアルポート番号情報しか得られないので、COMにデバイスが複数個繋がっている場合、何がどのポートに繋がっているか分かりません。
より詳細なシリアルポートの情報が必要な場合は WMI を使う必要があります。

■プログラム

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Management;

namespace ConsoleApplication1 {
    class Program {
        static void Main(string[] args) {
            Program p = new Program();
            p.a1();
            Console.Write("\n");
            p.a2();
            Console.Write("\nEnterキーを押して下さい。");
            Console.ReadLine();
        }
 

        void a1() {
            Console.WriteLine(">> SerialPort.GetPortNames -------");
            string[] ports =
System.IO.Ports.SerialPort.GetPortNames();
            foreach (string port in ports) {
                Console.WriteLine(port);
            }
        }

        void a2() {
            Console.WriteLine(">> Win32_SerialPort -------");
            ManagementClass sp =
new ManagementClass("Win32_SerialPort");
            foreach (ManagementObject p in sp.GetInstances()) {
                Console.WriteLine("DeviceID:" + (string)p.GetPropertyValue("DeviceID"));
                Console.WriteLine("Caption :" + (string)p.GetPropertyValue("Caption"));
            }
        }
    }
}

■Managementクラス参照をプロジェクトに追加する方法
「型または名前空間名 'ManagementClass' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。」というエラーが出た場合の対応方法は以下の通りです。(Visual Studio Express 2010
Win32serialport


■出力

>> SerialPort.GetPortNames -------
COM3

>> Win32_SerialPort -------
DeviceID:COM3
Caption :USB-ADC AD7793 CQ Board (COM3)

Enterキーを押して下さい。

■参考にさせていただいたWebサイト
 ・シリアルポートの名前取得

« USB経由でLED点滅実験 | トップページ | ADコンバータの定電流源を使用してみました »

パソコン・インターネット」カテゴリの記事