Windowsで使えるCOMポートを調べる

このへんからかな?
Enumerating Legacy COM Ports
http://msdn2.microsoft.com/en-us/library/ms800613.aspx


HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM\レジストリでは、登録されないデバイスがあるので、見えないことがあるようだ。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ACPI\PNPxxxxでも取ることができるようだけど、PnPデバイスが相手の時にはこっちのほうがいいか。
WMIで、Win32_SerialPortを列挙するというのも登録されないデバイスがあって、完全ではないようだ。
http://www2.noritz.co.jp/anchor/ashp/netmon/samples/wmi_hard.html#Win32_SerialPort.htm
結局CreateFileで、COMx:を順に調べるしかないようだ。それも、USBシリアルで追加される可能性があるので、一度調べて保持するだけではダメで、WM_DEVICECHANGEでトラップして都度再検索をかける必要がある。
EnumPortsを使ったサンプルがあった。
http://www.tukuyomi.jp/oasis/tips/tipscreate.cgi?cmd=show&no=78&class=win
.NET2.0なら、SerialPort.GetPortNamesが使える?
http://msdn2.microsoft.com/ja-jp/library/system.io.ports.serialport.getportnames(VS.80).aspx
http://www.atmarkit.co.jp/fdotnet/dotnettips/523serialportnames/serialportnames.html
GetCommPropertiesってのもあるのか。
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpfileio/html/_win32_getcommproperties.asp
さらにさかのぼって、どのドライバで動いているかを調べることを考えると、マニュアル設定にしちゃうというのも仕方がないのか。
スクリプトのサンプルがあった。
コンピュータに接続されている USB デバイスを特定する方法はありますか
http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/mar05/hey0315.mspx
うー、めんどくせ。