1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

デバイスIDからシリアルポート(COM)番号取得

Last updated at Posted at 2023-09-08

概要

通常シリアルポート番号はPCにデバイスが接続された時点で自動で割り付けされます。
シリアル通信を行う場合"COM**"とポート番号を指定しますが、PCが変更になった
場合には変わってしまいます。
ポート番号一覧を表示して選択しても良いのですが、Bluetoothシリアル通信では
送信用、受信用で同一のデバイス名で表示されるため違いが分かりません。
2023-09-08 085153.png

色々調べた結果、USBデバイスのユニークIDが取得できるとのことで、このIDとCOMポート
番号を紐づけすることができました。

デバイスのユニークIDについて

 デバイスマネージャーを起動し、'詳細タブ'から'デバイス インスタンス パス'を選択すると
 表示されます。このIDをあらかじめ調べておく必要があります。
2023-09-08 073700.png

作成したプログラムについて

プログラムを起動するとForm1が表示されます。
テキストボックスにデバイスマネージャーで調べておいたデバイスインスタンスパスを入力後、
COM番号取得ボタンを押すと隣のテキストボックスに表示されます。

2023-09-08 083926.png

また、別のPCに接続してもCOM番号を取得できました。

2023-09-08 090152.png

環境

 VisualStudio C# .NET6.0
 ※NuGetで「System.Management」をインストール。
2023-09-08 073403.png

コード


using static System.Windows.Forms.VisualStyles.VisualStyleElement.StartPanel;
using System.Management;

namespace _comPort_get
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            // インスタンス作成
            ManagementClass device = new ManagementClass("Win32_PnPEntity");

            // 接続されたデバイスを取得
            foreach (ManagementObject port in device.GetInstances())
            {
                // デバイスインスタンスパス取得
                string dev_uqid = (string)port.GetPropertyValue("PNPDeviceID");

                // デバイス名取得
                string name = (string)port.GetPropertyValue("Name");

                // デバイスインスタンスパスに一致するか確認
                if (dev_uqid.Contains(textBox1.Text))
                {
                    // "(COM" に一致するインデックス取得
                    int index = name.IndexOf("(COM");

                    // com番号取得
                    string comPort = name.Substring(index + 1).Replace(")", "");

                    // 表示
                    textBox2.Text = comPort;

                }

            }
        }
    }
}

参考サイト

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?