まずは利用可能なシリアルポートの取得。最初に見つけたのはSystem.IO.Ports.SerialPort.GetPortNames()。これは'COM1', 'COM2'といったポートの番号を返してくれます。しかしTeratermでは'通信ポート (COM1)', 'AT90USBxxx CDC USB to UART MGM (COM3)'のようにより詳細な名前が表示され分かりやすいので、できればこういう表示をしたいところ。
こういう時はWMIを使えばよいそうで、以下サンプルコード。
using System.Collections.Generic;
using System.Management;
(略)
Dictionary PortsTable = new Dictionary<string, string>();
ManagementClass mcW32SerPort = new ManagementClass("Win32_SerialPort");
foreach (ManagementObject aSerialPort in mcW32SerPort.GetInstances())
{
PortsTable.Add(
(string)aSerialPort.GetPropertyValue("Caption"),
(string)aSerialPort.GetPropertyValue("DeviceID"));
}
comboBoxCOMPorts.Items.Clear();
foreach (string aPortCaption in PortsTable.Keys)
{
comboBoxCOMPorts.Items.Add(aPortCaption);
}
Comments