QUEST LOG · April 28, 2020· UPDATED June 2, 2026
C# で VID と PID を使って serialport に自動接続する
もともと C# の serial port 関数の公式サンプル は、こんな感じです
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;
}
詳しい内容は下のリンクを参照してください😁
コードの出典
公開中のアプリ
iOS・Android で無料。


