WMI を使い、有効なシリアルポートの一覧を名前付きで取得する方法です。
WMI を使える言語であれば、言語に依存せず同様の方法で一覧を取得できます。
Ruby によるサンプルコード
get_enable_serialports.rb
require 'win32ole'
有効なシリアルポートの一覧をハッシュで返す。
(ポート名が key、接続機器の名前が value)
def serialports locator = WIN32OLE.new("WbemScripting.SWbemLocator") services = locator.ConnectServer()
comlist = {}
# 内蔵シリアルポート一覧を取得
services.ExecQuery("SELECT * FROM Win32_SerialPort").each do |item|
comlist[item.DeviceID] = item.Name
end
# PnPシリアルポート一覧を取得
services.ExecQuery("SELECT * FROM Win32_PnPEntity").each do |item|
comlist[$1] = item.Description if item.Name =~ /\((COM\d+)\)/
end
return Hash[
# シリアルポート名に含まれる数字も考慮し昇順にソート
comlist.sort_by {|k, v|
k.scan(/(\d+)|([^\d]+)/).map{|s|
s[0] ? [0, s[0].to_i] : [1, s[1]]
}
}
]
end
puts serialports.map{|k, v| "#{k}: #{v}"}
C# の場合はこちらが参考になります。
C# でシリアルポートを列挙する方法: enajet
ピンバック: シリアル通信入門 (RS-232C/422/485) | TipsZone