Windowsで使用可能なモデムを取得する
仕事で調べた。Webも有効な情報がなく、SDKにも載って無く苦労した。ひたすらレジストリとにらめっこ。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Modem\Enumから0で始まるキーの値を取得する。
ex. HDAUDIO\FUNC_02&VEN_14F1&DEV_2C06&SUBSYS_104D1700&REV_1000\4&a1f29e7&0&0102
複数のモデムが使えるときは0~連番の数字で登録されているのですべて取得する。
取得した値をもとにHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enumから情報を取得する。
ex. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\HDAUDIO\FUNC_02&VEN_14F1&DEV_2C06&SUBSYS_104D1700&REV_1000\4&a1f29e7&0&0102
名称を取得するときはFriendlyName項目から取得する。この項目を取得すると同じ名前のデバイスがあった時、#付きの番号が付いた名前で取得できる。
更に詳細のドライバー情報を取得するときにはDriver項目を元にHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Classから情報を取得する。
ex. Driverが{4d36e96d-e325-11ce-bfc1-08002be10318}\0000のとき、
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4d36e96d-e325-11ce-bfc1-08002be10318}\0000
COMポートが必要ならAttachedTo項目から取得する。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4d36e96d-e325-11ce-bfc1-08002be10318}には過去に認識したすべてのモデム情報が登録されている。
この方法で取得すれば、WindowsXPだろうがWindows7だろうが問題なく接続しているモデムの情報が取得できる。