---
title: "C# で VID と PID を使って serialport に自動接続する"
description: "もともと Cの serial port 関数の公式サンプルは、こんな感じです"
author: "kidneyweakx"
published: 2020-04-28T00:00:00.000Z
updated: 2026-06-02T17:25:09.833Z
lang: ja
tags: ["程式筆記", "C#"]
canonical: https://kidneyweakx.com/blog/20log-0428-serial?lang=ja
alternate_zh_tw: https://kidneyweakx.com/blog/20log-0428-serial.md
alternate_en: https://kidneyweakx.com/blog/20log-0428-serial.md?lang=en
---

# C# で VID と PID を使って serialport に自動接続する

もともと C# の serial port 関数の[公式サンプル](https://docs.microsoft.com/zh-tw/dotnet/api/system.io.ports.serialport?view=dotnet-plat-ext-3.1)は、こんな感じです

```C#
streamport = new SerialPort("COM3", bauadrate);
```

この方法だと、開くたびにポートを書き換えに行かないといけなくてかなり面倒です。そこで、他の人が Windows 向けに書いた関数を見つけて、静的な port string を `SerialPort` に返すようにしたところ、とてもうまくいきました。

```C#
// 有錯誤可能是你沒有 using Microsoft.Win32;或其他lib
 public static List<string> ComPortNames(String VID, String PID)
    {
        // 讀取PID和VID
        String pattern = String.Format("^VID_{0}.PID_{1}", VID, PID);
        Regex _rx = new Regex(pattern, RegexOptions.IgnoreCase);
        List<string> comports = new List<string>();
        RegistryKey rk1 = Registry.LocalMachine;
        RegistryKey rk2 = rk1.OpenSubKey("SYSTEM\\CurrentControlSet\\Enum");
        foreach (String s3 in rk2.GetSubKeyNames())
        {
            RegistryKey rk3 = rk2.OpenSubKey(s3);
            foreach (String s in rk3.GetSubKeyNames())
            {
                if (_rx.Match(s).Success)
                {
                    RegistryKey rk4 = rk3.OpenSubKey(s);
                    foreach (String s2 in rk4.GetSubKeyNames())
                    {
                        RegistryKey rk5 = rk4.OpenSubKey(s2);
                        RegistryKey rk6 = rk5.OpenSubKey("Device Parameters");
                        comports.Add((string)rk6.GetValue("PortName"));
                        // 獲取port name，如有多個相同設備，加入comports array
                    }
                }
            }
        }
        return comports;
    }
```

詳しい内容は下のリンクを参照してください😁
[コードの出典](https://www.codeproject.com/Tips/349002/Select-a-USB-Serial-Device-via-its-VID-PID)
